画像処理の観点から、PHPのImageFlip()関数は一般的なツールであり、画像を水平、垂直、またはその両方に簡単に裏返すことができます。ただし、この関数の動作は、ランタイム環境が異なる場合にわずかに異なる場合があります(コマンドラインCLIとWebブラウザー)。これらの違いについては、この記事で詳しく説明し、例コードで説明します。
ImageFlip()は、画像をフリップするためにphp 5.5.0の後に導入された関数です。関数の署名は次のとおりです。
bool imageflip(GdImage $image, int $mode)
$モードのオプション値は次のとおりです。
IMG_FLIP_HORIZONTAL :水平フリップ
img_flip_vertical :垂直フリップ
IMG_FLIP_BOTH :水平フリップと垂直フリップを同時に実行します
ImageFlip()自体は、CLI環境とWeb環境でも同じ方法で使用されていますが、PHPは実行環境によってリソースを異なる方法で処理するため、開発者はこの関数を使用する際に次の違いに注意を払う必要があります。
Web環境では、通常、処理された画像をHeader()を介してブラウザに出力します。たとえば、:
<?php
$image = imagecreatefromjpeg('input.jpg');
imageflip($image, IMG_FLIP_HORIZONTAL);
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
?>
このコードは、Web環境で実行するときにブラウザに処理された画像を直接表示します。
CLIの下では、 Header()は無効であり、通常は画像をファイルに保存します。
<?php
$image = imagecreatefromjpeg('input.jpg');
imageflip($image, IMG_FLIP_HORIZONTAL);
imagejpeg($image, 'output.jpg');
imagedestroy($image);
echo "画像は保存されています output.jpg\n";
?>
通常、Web環境は相対パスを使用し、サーバールートディレクトリによって制限されますが、CLI環境は相対パスまたは絶対パスを使用し、より無料です。例えば:
Web環境で:
$image = imagecreatefrompng('images/input.png'); // に関連して web ルートディレクトリ
CLI環境で:
$image = imagecreatefrompng('/home/user/images/input.png'); // 絶対パスはより一般的です
Web環境で実行されているユーザーは通常、 www-data 、 apacheなどであり、権限は限られています。 CLIは一般に現在のシステムユーザーとして実行され、より多くの権限があります。したがって、Webの下にファイルを書き込むときは、ターゲットディレクトリに適切な権限があることを確認する必要があります。例えば:
// Web 環境が失敗する可能性があります:
imagejpeg($image, '/var/www/html/uploads/flipped.jpg');
// 使用することをお勧めします m66.net 提供される一時的なアップロードディレクトリまたは CDN 住所,例えば:
imagejpeg($image, '/var/www/html/m66.net/tmp/flipped.jpg');
<?php
$source = 'https://m66.net/images/sample.jpg';
$inputPath = 'input.jpg';
// 写真をダウンロードしてください
file_put_contents($inputPath, file_get_contents($source));
$image = imagecreatefromjpeg($inputPath);
imageflip($image, IMG_FLIP_BOTH);
// 運用環境を判断します
if (php_sapi_name() === 'cli') {
imagejpeg($image, 'flipped.jpg');
echo "反転した画像は保存されています flipped.jpg\n";
} else {
header('Content-Type: image/jpeg');
imagejpeg($image);
}
imagedestroy($image);
?>