PHP GD imagecopyresampled()并将其水平翻转

问题描述 投票:1回答:3

我正在使用imagecopyresampled()从另一个PNG图像渲染PNG图像。现在我想将图像的某些部分水平翻转,所以我已经尝试过了:

//horizontal
$src_x     = $width - 1;
$src_width = -$width;

imagecopyresampled(
    $imgdest, $imgsrc, 0, 0, $src_x, $src_y , $width, $height
    , $src_width, $src_height
);

取自a user-comment from the PHP Manual

在我的情况下,它不起作用(我将很多图像从原始图像复制到新图像),而是复制了另一幅图像。有人对此有解决方案吗?

php image gd image-manipulation
3个回答
2
投票

我知道这有点晚了,但是我自己也在寻找这个解决方案,只是找到了需要的代码...

function image_flip($img, $type=''){
    $width  = imagesx($img);
    $height = imagesy($img);
    $dest   = imagecreatetruecolor($width, $height);
    switch($type){
        case '':
            return $img;
        break;
        case 'vert':
            for($i=0;$i<$height;$i++){
                imagecopy($dest, $img, 0, ($height - $i - 1), 0, $i, $width, 1);
            }
        break;
        case 'horiz':
            for($i=0;$i<$width;$i++){
                imagecopy($dest, $img, ($width - $i - 1), 0, $i, 0, 1, $height);
            }
        break;
        case 'both':
            for($i=0;$i<$width;$i++){
                imagecopy($dest, $img, ($width - $i - 1), 0, $i, 0, 1, $height);

            }
            $buffer = imagecreatetruecolor($width, 1);
            for($i=0;$i<($height/2);$i++){
                imagecopy($buffer, $dest, 0, 0, 0, ($height - $i -1), $width, 1);
                imagecopy($dest, $dest, 0, ($height - $i - 1), 0, $i, $width, 1);
                imagecopy($dest, $buffer, 0, $i, 0, 0, $width, 1);
            }
            imagedestroy($buffer);
        break;
    }
    return $dest;
}

0
投票

好多年后,我自己找到了答案,所以我只想让其他人知道。

非常简单,例如:

而不是:

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

我会使用:

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

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


0
投票

我使用:

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

https://www.php.net/manual/es/function.imageflip.php

© www.soinside.com 2019 - 2024. All rights reserved.