PHP画像処理(その2)

齐天大圣
齐天大圣オリジナル
2020-05-03 12:45:53156ブラウズ

写真の背景管理

キャンバスを作成するために以前に学んだことは、空白から始めて、色、描画ポイント、テキストなどで塗りつぶすということでした。これで、既存の画像から背景を直接ロードできるようになりました。よく使用される関数がいくつかあります:

imagecreatefrompng()、imagecreatefromjpeg()、imagecreatefromgif()。これらは、対応する画像フォーマットをロードすることを示します。

さらに、4 つのセルを含む配列を返す別の関数 getimagesize() を学習します。インデックス 0 には画像の幅のピクセル値が含まれ、インデックス 1 には画像の高さのピクセル値が含まれます。インデックス 2 は画像タイプのマークです: 1 = GIF、2 = JPG、3 = PNG、...

<?php
/**
 * 向不同的格式的图片中间画一个字符
 */
function image($imgfile, $string)
{
    list($width, $height, $type) = getimagesize($imgfile);
    $types = [&#39;1&#39; => &#39;git&#39;, &#39;2&#39; => &#39;jpeg&#39;, &#39;3&#39; => &#39;png&#39;];
    
    $createFunc = &#39;imagecreatefrom&#39; . $types[$type];
    $im = $createFunc($imgfile);
    
    $textColor = imagecolorallocate($im, 255, 0, 0);
    $x = ($width - imagefontwidth(5) * strlen($string)) / 2;
    $y = ($height - imagefontheight(5)) / 2;
   
    imagestring($im, 5, $x, $y, $string, $textColor);
    
    header("Content-type:image/".$types[$type]);
    $output = &#39;image&#39;.$types[$type];
    $output($im);
    imagedestroy($im);
}
//image(&#39;timg.jpg&#39;, &#39;jpg&#39;);
image(&#39;1.png&#39;, &#39;png&#39;);

画像のスケーリングとトリミング

以下は非常に強力で、スケーリングとトリミングを完了できる機能です。写真の機能。

この関数のプロトタイプは次のとおりです:

bool imagecopyresampled (
 resource $dst_image , 
 resource $src_image , 
 int $dst_x , 
 int $dst_y , 
 int $src_x , 
 int $src_y , 
 int $dst_w , 
 int $dst_h , 
 int $src_w , 
 int $src_h 
)

imagecopyresampled() ある画像内の正方形の領域を別の画像にコピーし、ピクセル値を滑らかに補間します。これにより、特に、優れた鮮明さを維持しながら画像のサイズを縮小します。

Parameters

  • dst_image ターゲット画像接続リソース。

  • src_image ソース画像リンク リソース。

  • dst_x ターゲット X 座標点。

  • dst_y ターゲットの Y 座標点。

  • src_x ソースの X 座標点。

  • src_y ソースの Y 座標点。

  • dst_w ターゲット幅。

  • dst_h 目標高さ。

  • src_w ソース画像の幅。

  • src_h ソース画像の高さ。

画像のサムネイル

/**
 * 图片等比例缩放
 * @param string img 原图路径
 * @param int width 新图宽度
 * @param int height 新图高度
 */
function thumb($img, $width = 0, $height = 0)
{
    // 获取图片信息
    list($srcW, $srcH, $srcType) = getimagesize($img);
    $types = [1 => &#39;gif&#39;, 2 => &#39;jpeg&#39;, 3 => &#39;png&#39;];
    $type  = $types[$srcType];
    
    // 原图资源句柄
    $create = &#39;imagecreatefrom&#39; . $type;
    $srcIm  = $create($img);
    $ratioOrig = $srcW / $srcH;
    if ($width / $height > $ratioOrig) {
        $width = $height * $ratioOrig;
    } else {
        $height = $width / $ratioOrig;
    }
    
    // 新图资源
    $im = imagecreatetruecolor($width, $height);
    imagecopyresampled($im, $srcIm, 0, 0, 0, 0, 
        $width, $height, $srcW, $srcH);
    $output = &#39;image&#39; . $type;
    header("content-type:image/$type");
    $output($im);
    imagedestroy($im);
    imagedestroy($srcIm);
}
//thumb(&#39;timg.jpg&#39;, 200, 150);
thumb(&#39;timg.jpg&#39;, 300, 10000);    
// 如想按某一边等比例缩放,只要把另一边值设为无限大即可

画像のトリミング

/**
 * @param string $img 裁剪图路径
 * @param int $x 裁剪点x坐标
 * @param int $y 裁剪点y坐标
 * @param int $width 图片裁剪的宽度
 * @param int $height 图片裁剪的高度
 */
function crop ($img, $x, $y, $width, $height)
{
    // 获取图片信息
    $im = imagecreatetruecolor($width, $height);
    $srcType = getimagesize($img)[2];
    $types = [1 => &#39;gif&#39;, 2 => &#39;jpeg&#39;, 3=> &#39;png&#39;];
    $type = $types[$srcType];
    // 原图资源句柄
    $create = &#39;imagecreatefrom&#39; . $type;
    $srcIm = $create($img);
    // 裁剪图片
    imagecopyresampled($im, $srcIm, 0, 0,
         $x, $y, $width, $height, $width, $height);
    // 输出图片
    $output = &#39;image&#39;.$type;
    header("content-type:image/$type");
    $output($im);
    imagedestroy($im);
    imagedestroy($srcIm);
}

画像の透かし

画像の透かし機能を完成させるにはimagecopyresampledを使用してください, しかし、ここでは別の関数 imagecopy を学びます。

bool imagecopy(
 resource $dst_im,
    resource $src_im,
    int $dst_x, 
    int $dst_y, 
    int $src_x, 
    int $src_y, 
    int $src_w, 
    int $src_h
)

src_x, src_y から始まり、幅 src_w、高さ src_h の src_im 画像の部分を、座標が dst_x と dst_y である dst_im 画像の位置にコピーします。

りー

PHP画像処理(その2)

以上がPHP画像処理(その2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。