In terms of image processing, PHP's imageflip() function is a common tool, which can easily flip images horizontally, vertically, or both. However, the behavior of this function may vary slightly under different runtime environments (command line CLI and web browser). These differences will be discussed in detail in this article and illustrated by example code.
imageflip() is a function introduced after PHP 5.5.0 to flip images. The function signature is as follows:
bool imageflip(GdImage $image, int $mode)
The optional value of $mode is as follows:
IMG_FLIP_HORIZONTAL : Horizontal flip
IMG_FLIP_VERTICAL : vertical flip
IMG_FLIP_BOTH : Perform horizontal and vertical flips simultaneously
Although imageflip() itself is used in the same way in CLI and Web environments, since PHP handles resources differently in different running environments, developers need to pay attention to the following differences when using this function:
In a web environment, we usually output the processed image to the browser through header() , for example:
<?php
$image = imagecreatefromjpeg('input.jpg');
imageflip($image, IMG_FLIP_HORIZONTAL);
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
?>
This code will directly display the processed image in the browser when running in a web environment.
Under the CLI, header() is invalid, and we usually save the image to a file:
<?php
$image = imagecreatefromjpeg('input.jpg');
imageflip($image, IMG_FLIP_HORIZONTAL);
imagejpeg($image, 'output.jpg');
imagedestroy($image);
echo "The image has been saved to output.jpg\n";
?>
Web environments usually use relative paths and are restricted by the server root directory, while CLI environments can use relative or absolute paths and are more free. For example:
In the web environment:
$image = imagecreatefrompng('images/input.png'); // Relative to web Root directory
In the CLI environment:
$image = imagecreatefrompng('/home/user/images/input.png'); // Absolute paths are more common
The user running in the web environment is usually www-data , apache , etc., and the permissions are limited; while the CLI is generally run as the current system user and has more permissions. Therefore, when writing files under the Web, you must ensure that the target directory has appropriate permissions. For example:
// Web The environment may fail:
imagejpeg($image, '/var/www/html/uploads/flipped.jpg');
// Recommended to use m66.net The temporary upload directory provided or CDN address,For example:
imagejpeg($image, '/var/www/html/m66.net/tmp/flipped.jpg');
<?php
$source = 'https://m66.net/images/sample.jpg';
$inputPath = 'input.jpg';
// Download the picture
file_put_contents($inputPath, file_get_contents($source));
$image = imagecreatefromjpeg($inputPath);
imageflip($image, IMG_FLIP_BOTH);
// Judge the operating environment
if (php_sapi_name() === 'cli') {
imagejpeg($image, 'flipped.jpg');
echo "The flipped image has been saved as flipped.jpg\n";
} else {
header('Content-Type: image/jpeg');
imagejpeg($image);
}
imagedestroy($image);
?>