如何使用PHP GD水平翻转图像的一部分

时间:2011-11-22 19:39:45

标签: php image gd

我正在使用其他图片中的部件创建图像。我使用imagecopy,但“部分”来了。某些部件需要水平翻转。

例如这部分:

imagecopy($output, $input, 0,8, 44,20, 4,12);

如何将此部分水平翻转?

我试过这个:

imagecopy($output, $input, (0 - 1),8, 44,20, 4,12);

但它不起作用。

我已经搜索了很多年,但是找不到任何有用的东西

我的脚本如下所示:

$input = imagecreatefrompng($image_file);
$output = imagecreatetruecolor(50, 40);

imagecopy($output, $input, 4,8, 20,20, 8,14);
imagecopy($output, $input, 12,8, 44,20, 4,14);
imagecopy($output, $input, 4,20, 4,20, 4,14);
imagecopy($output, $input, 8,28, 4,20, 4,14);
imagecopy($output, $input, 32,8, 52,20, 4,14);
imagecopy($output, $input, 24,20, 12,20, 4,14);
imagecopy($output, $input, 28,28, 12,20, 4,14); 
imagecopy($output, $input, 4,0, 40,8, 8,9);
imagecopy($output, $input, 24,0, 56,8, 8,9);


header('Content-Type: image/png');

imagepng($output);

imagedestroy($output);
imagedestroy($input);

3 个答案:

答案 0 :(得分:1)

Found here

//**************************************
// Name: Flip Image with GD
// Description:These are two easy to use functions that will flip an image, either horizontally or vertically. Just create an image, then execute one of these functions on the image resource. The image resource is passed by reference to the functions, so no return values are sent from the functions. Example shown in code.
// By: Ryand833
//
//This code is copyrighted and has// limited warranties.Please see http://www.Planet-Source-Code.com/vb/scripts/ShowCode.asp?txtCodeId=1876&lngWId=8//for details.//**************************************

<?php
function flipVertical(&$img) {
 $size_x = imagesx($img);
 $size_y = imagesy($img);
 $temp = imagecreatetruecolor($size_x, $size_y);
 $x = imagecopyresampled($temp, $img, 0, 0, 0, ($size_y-1), $size_x, $size_y, $size_x, 0-$size_y);
 if ($x) {
$img = $temp;
 }
 else {
die("Unable to flip image");
 }
}
function flipHorizontal(&$img) {
 $size_x = imagesx($img);
 $size_y = imagesy($img);
 $temp = imagecreatetruecolor($size_x, $size_y);
 $x = imagecopyresampled($temp, $img, 0, 0, ($size_x-1), 0, $size_x, $size_y, 0-$size_x, $size_y);
 if ($x) {
$img = $temp;
 }
 else {
die("Unable to flip image");
 }
}
$myimage = imagecreatefromjpeg("psclogo.jpg");
flipHorizontal($myimage);
header("Content-type: image/jpeg");
imagejpeg($myimage);
?>

以这个想法为出发点,您要做的是在图像的每个切片上调用imagecopyresample(如上所示),利用高度/宽度来反转切片。

然后,您可以在每个“重新采样”切片上调用imagecopy,将其复制到新的工作图像中。

答案 1 :(得分:0)

http://php.net/imagecopy

的评论中查看image_flip功能

修改这里是确切的链接:http://cz2.php.net/manual/en/function.imagecopy.php#85992

编辑2 要在代码中实现它,只需使用

$flippedOutput = ImageFlip($output,IMAGE_FLIP_HORIZONTAL);

答案 2 :(得分:0)

我想在几年后分享答案......:)

变化:

imagecopy($output, $input, 8, 20, 4, 20, 4, 12)

要:

imagecopyresampled($output, $input, 8, 20, (8 - 1), 20, 4, 12, 0 - 4, 12);

这会将图像的一部分水平翻转。