PHP は強力な Web 開発言語として、当然ながらさまざまな実用的なアプリケーション機能を備えています。その中でも画像を加工する機能もその一つです。 Web開発では画像処理が避けられず、単純な画像の切り取りや拡大縮小から、複雑な特殊効果やフィルターなどの画像処理機能が必要となります。この記事では、PHP でよく使用される画像処理関数をいくつか紹介します。
1. 画像タイプとデータ表現
PHP では、一般的な画像タイプには JPEG、GIF、PNG などが含まれます。画像の種類が異なれば、データ構造も異なります。たとえば、JPEG 画像のデータは DCT 変換の係数に基づいていますが、PNG 画像のデータはピクセルのカラー値に基づいています。 PHP では、主に GD2 および Imagick 拡張機能を含む、さまざまなタイプの画像を解析および処理するために、さまざまな拡張ライブラリを使用する必要があります。
GD2 を使用するか Imagick を使用するかにかかわらず、処理のために画像データをメモリにロードする必要があります。したがって、画像処理機能を使用する場合は、まず画像データを対応するデータ型に変換する必要があります。 GD2 を例に挙げると、一般的な画像データのロード方法は次のとおりです。
//加载JPEG图片 $image = imagecreatefromjpeg('image.jpg'); //加载PNG图片 $image = imagecreatefrompng('image.png'); //加载GIF图片 $image = imagecreatefromgif('image.gif');
Imagick を使用する場合、画像データは Imagick オブジェクトを介してロードおよび処理される必要があります。例:
//实例化Imagick对象并加载图片 $im = new Imagick('image.jpg'); //调整图片大小 $im->resizeImage(320, 240, Imagick::FILTER_LANCZOS, 1); //输出图片 header('Content-Type: image/jpeg'); echo $im;
2. 基本操作
画像のサイズ変更は、縮小でも拡大でも一般的な画像処理要件です。 。 GD2 では、imagecopyresampled() 関数を使用して画像のサイズ変更を行うことができます。元の画像を指定されたサイズに合わせて拡大縮小し、調整した画像データを出力する機能です。例:
//打开原始图片 $src = imagecreatefromjpeg('image.jpg'); //设置目标图片尺寸 $dst_width = 320;//目标宽度 $dst_height = 240;//目标高度 //创建目标图片 $dst = imagecreatetruecolor($dst_width, $dst_height); //缩放图片 imagecopyresampled($dst, $src, 0, 0, 0, 0, $dst_width, $dst_height, imagesx($src), imagesy($src)); //输出图片 header('Content-Type: image/jpeg'); imagejpeg($dst); //释放内存 imagedestroy($src); imagedestroy($dst);
Imagick では、画像のサイズ変更は、resizeImage() メソッドによって実現されます。例:
//打开原始图片 $im = new Imagick('image.jpg'); //设置目标图片尺寸 $im->resizeImage(320, 240, Imagick::FILTER_LANCZOS, 1); //输出图片 header('Content-Type: image/jpeg'); echo $im;
Picture Cut は、通常、画像のトリミングとインターセプトに使用されます。 GD2 では、imagecopy() 関数を使用して画像の切り取りを行うことができます。元画像の指定範囲のピクセルを対象画像にコピーし、切り出した画像データを出力する機能です。例:
//打开原始图片 $src = imagecreatefromjpeg('image.jpg'); //设置目标图片尺寸 $dst_width = 320;//目标宽度 $dst_height = 240;//目标高度 //设置剪切位置和尺寸 $x = 100;//起始X坐标 $y = 100;//起始Y坐标 $width = 160;//剪切宽度 $height = 120;//剪切高度 //创建目标图片 $dst = imagecreatetruecolor($dst_width, $dst_height); //剪切图片 imagecopy($dst, $src, 0, 0, $x, $y, $width, $height); //输出图片 header('Content-Type: image/jpeg'); imagejpeg($dst); //释放内存 imagedestroy($src); imagedestroy($dst);
Imagick では、画像のトリミングは CropImage() メソッドを通じて実行されます。例:
//打开原始图片 $im = new Imagick('image.jpg'); //设置剪切位置和尺寸 $x = 100;//起始X坐标 $y = 100;//起始Y坐标 $width = 160;//剪切宽度 $height = 120;//剪切高度 //剪切图片 $im->cropImage($width, $height, $x, $y); //输出图片 header('Content-Type: image/jpeg'); echo $im;
3. 高度な操作
テキスト ウォーターマークは一般的な画像の特殊効果で、サムネイルの生成に使用できます。画像のアップロードなどのシナリオでよく使用されます。 GD2 では、imagettftext() 関数を使用してテキストの透かしを実装できます。画像上に指定された文字を描画し、透かし入りの画像データを出力する関数です。例:
//打开原始图片 $src = imagecreatefromjpeg('image.jpg'); //设置文本颜色 $color = imagecolorallocate($src, 255, 0, 0); //设置字体文件路径 $font = 'arial.ttf'; //设置字体大小 $size = 20; //设置水印文本 $text = 'www.example.com'; //计算文本位置 $bbox = imagettfbbox($size, 0, $font, $text); $x = imagesx($src) - $bbox[2] - 5; $y = imagesy($src) - $bbox[1] - 5; //添加水印 imagettftext($src, $size, 0, $x, $y, $color, $font, $text); //输出图片 header('Content-Type: image/jpeg'); imagejpeg($src); //释放内存 imagedestroy($src);
Imagick では、テキストの透かしは annotateImage() メソッドを通じて実装されます。例:
//打开原始图片 $im = new Imagick('image.jpg'); //创建画笔对象 $draw = new ImagickDraw(); //设置字体路径和大小 $draw->setFont('arial.ttf'); $draw->setFontSize(20); //设置文本位置和颜色 $draw->setGravity(Imagick::GRAVITY_SOUTHEAST); $draw->setFillColor('red'); //添加水印文本 $draw->annotation(5, 5, 'www.example.com'); //绘制水印 $im->drawImage($draw); //输出图片 header('Content-Type: image/jpeg'); echo $im;
画像の特殊効果は、ぼかし、鮮明化、レリーフ、その他の効果が必要な画像処理の焦点と難しさです。アルゴリズムを通じて処理されます。 GD2 では、imagefilter() 関数を使用して画像の特殊効果を実現できます。オリジナル画像にフィルタ処理を施し、特殊効果を施した画像データを出力する機能です。例:
//打开原始图片 $src = imagecreatefromjpeg('image.jpg'); //创建滤镜 $filter = IMG_FILTER_GRAYSCALE;//灰度滤镜 //应用滤镜 imagefilter($src, $filter); //输出图片 header('Content-Type: image/jpeg'); imagejpeg($src); //释放内存 imagedestroy($src);
Imagick では、画像の特殊効果はさまざまな方法で実現されます。たとえば、ガウスぼかし効果を実現するには、gaussianBlurImage() メソッドを使用します:
//打开原始图片 $im = new Imagick('image.jpg'); //应用高斯模糊滤镜 $im->gaussianBlurImage(10, 5); //输出图片 header('Content-Type: image/jpeg'); echo $im;
IV. 概要
この記事では、基本操作と高度な操作を含む、PHP の一般的な画像処理関数を紹介します。画像のサイズ変更、トリミング、テキストの透かし入れ、画像の特殊効果など、すべて GD2 と Imagick の 2 つの拡張ライブラリを通じて実現できます。これらの関数を使用する場合は、画像の種類やデータ表現の違いに注意し、実際のニーズに応じて適切な関数やパラメータを選択する必要があります。同時に、サーバーへの負荷を避けるために、メモリ使用量やパフォーマンスなどの問題にも注意を払う必要があります。
以上がPHPアプリケーション向けの画像処理機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。