update page now
Laravel Live Japan

imageflip

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

imageflip指定したモードで画像を反転させる

説明

imageflip(GdImage $image, int $mode): bool

image を、指定した mode で反転させます。

パラメータ

image

imagecreatetruecolor()のような画像作成関数が返す GdImage オブジェクト。

mode

反転のモード。定数 IMG_FLIP_* のいずれかを指定します。

定数 意味
IMG_FLIP_HORIZONTAL 水平方向に、左右を反転させます。
IMG_FLIP_VERTICAL 垂直方向に、上下を反転させます。
IMG_FLIP_BOTH 水平方向、垂直方向の両方に反転させます。

戻り値

成功した場合に true を、失敗した場合に false を返します。

変更履歴

バージョン 説明
8.0.0 image は、 GdImage クラスのインスタンスを期待するようになりました。 これより前のバージョンでは、有効な gd resource が期待されていました。

例1 垂直方向の反転

この例では、定数 IMG_FLIP_VERTICAL を使います。

<?php
// 画像ファイル
$filename = 'phplogo.png';

// コンテントタイプ
header('Content-type: image/png');

// 読み込み
$im = imagecreatefrompng($filename);

// 垂直反転
imageflip($im, IMG_FLIP_VERTICAL);

// 出力
imagejpeg($im);
?>

上の例の出力は、 たとえば以下のようになります。

垂直方向の反転の出力例

例2 水平方向の反転

この例では、定数 IMG_FLIP_HORIZONTAL を使います。

<?php
// 画像ファイル
$filename = 'phplogo.png';

// コンテントタイプ
header('Content-type: image/png');

// 読み込み
$im = imagecreatefrompng($filename);

// 水平反転
imageflip($im, IMG_FLIP_HORIZONTAL);

// 出力
imagejpeg($im);
?>

上の例の出力は、 たとえば以下のようになります。

水平方向の反転の出力例

add a note

User Contributed Notes 1 note

up
5
Daniel Klein
9 years ago
If you're using PHP < 5.5 you can use this code to add the same functionality. If you pass the wrong $mode in it will silently fail. You might want to add your own error handling for this case.

<?php
if (!function_exists('imageflip')) {
  define('IMG_FLIP_HORIZONTAL', 0);
  define('IMG_FLIP_VERTICAL', 1);
  define('IMG_FLIP_BOTH', 2);

  function imageflip($image, $mode) {
    switch ($mode) {
      case IMG_FLIP_HORIZONTAL: {
        $max_x = imagesx($image) - 1;
        $half_x = $max_x / 2;
        $sy = imagesy($image);
        $temp_image = imageistruecolor($image)? imagecreatetruecolor(1, $sy): imagecreate(1, $sy);
        for ($x = 0; $x < $half_x; ++$x) {
          imagecopy($temp_image, $image, 0, 0, $x, 0, 1, $sy);
          imagecopy($image, $image, $x, 0, $max_x - $x, 0, 1, $sy);
          imagecopy($image, $temp_image, $max_x - $x, 0, 0, 0, 1, $sy);
        }
        break;
      }
      case IMG_FLIP_VERTICAL: {
        $sx = imagesx($image);
        $max_y = imagesy($image) - 1;
        $half_y = $max_y / 2;
        $temp_image = imageistruecolor($image)? imagecreatetruecolor($sx, 1): imagecreate($sx, 1);
        for ($y = 0; $y < $half_y; ++$y) {
          imagecopy($temp_image, $image, 0, 0, 0, $y, $sx, 1);
          imagecopy($image, $image, 0, $y, 0, $max_y - $y, $sx, 1);
          imagecopy($image, $temp_image, 0, $max_y - $y, 0, 0, $sx, 1);
        }
        break;
      }
      case IMG_FLIP_BOTH: {
        $sx = imagesx($image);
        $sy = imagesy($image);
        $temp_image = imagerotate($image, 180, 0);
        imagecopy($image, $temp_image, 0, 0, 0, 0, $sx, $sy);
        break;
      }
      default: {
        return;
      }
    }
    imagedestroy($temp_image);
  }
}
?>
To Top