最初にこの記事を書いた時点では GD による画像反転の関数は用意されていなかったので独自に imageflip() という関数を書いたのがこの記事です。
しかし PHP 5.5 以降で全く同じ名前の関数 imageflip() が使えるようになりました。
使い方は簡単で imageflip() に画像リソースと反転方向を与えるだけです。
<?php $file = "sample.jpg"; $image = imagecreatefromjpeg($file); imageflip($image, IMG_FLIP_HORIZONTAL); header("Content-type: image/jpeg"); imagejpeg($image); imagedestroy($image);
反転方向の指定は水平反転を行う IMG_FLIP_HORIZONTAL、垂直反転を行う IMG_FLIP_VERTICAL、両方を行う IMG_FLIP_BOTH の3つです。
PHP 5.5より古いバージョンであっても画像の拡大縮小コピーを行う関数 imagecopyresampled のコピー元の幅や高さにマイナスを指定することで反転を行うことができます。
<?php function imageflip_alt(&$image, $direction, $alpha=false){ $width = imagesx($image); $height = imagesy($image); $new_image = imagecreatetruecolor($width, $height); // PNGなどの不透明度情報を持つ場合 if($alpha){ imagealphablending($new_image, false); imagesavealpha($new_image, true); } if($direction === 'vertical'){ imagecopyresampled($new_image, $image, 0, 0, 0, $height - 1, $width, $height, $width, -1 * $height); } else if($direction === 'horizontal'){ imagecopyresampled($new_image, $image, 0, 0, $width - 1, 0, $width, $height, -1 * $width, $height); } else if($direction === 'both'){ imagecopyresampled($new_image, $image, 0, 0, $width - 1, $height - 1, $width, $height, -1 * $width, -1 * $height); } else { return false; } imagedestroy($image); $image = $new_image; return true; } $file = "sample.jpg"; $image = imagecreatefromjpeg($file); imageflip_alt($image, 'horizontal'); header("Content-type: image/jpeg"); imagejpeg($image); imagedestroy($image);
使い方は、imageflip( 画像リソース, 方向 ) のように指定します。PNG 画像の場合は第三引数 $alpha を true にして下さい。 方向にはそれぞれ vertical(垂直)、horizontal(水平)、both(両方)が指定出来ます。
単に幅や高さをマイナスにするだけでは 1 ピクセルだけずれてしまうので座標を修正しています。
Similar Posts:
- [PHP]GDを使ってグラデーション画像をつくる
- [PHP]マスク画像で写真を好きな形に切り抜く(クリッピングマスク)
- [PHP]画像ファイルのアップロードとGDを使ったリサイズ
- [PHP]似た画像を検索して近い順番に並べる(類似画像検索)
- [PHP]HSV(HSB)色空間を比較して似た色合いの画像を検索する
- [PHP]複数の画像をランダムに敷き詰めて一枚の画像に合成
- [PHP]画像を連結して数値を表示する
- [PHP]似た色合いの画像をRGB値をもとに探す