PHP GD imagecopyresampled() 并水平翻转

发布于 2024-12-09 21:09:41 字数 471 浏览 0 评论 0原文

我正在使用 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
);

取自 来自 PHP 手册的用户评论

它在我的情况下不起作用(我将原始图像中的很多部分复制到新图像中),而是复制图像的另一部分。有人有解决办法吗?

I'm rendering a PNG image from another PNG image with imagecopyresampled(). Now i want some parts of the image to be flipped horizontal, so i have tried this:

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

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

Taken from a user-comment from the PHP Manual.

It does not work in my case (where I copy a lot of pieces from the original image to the new), instead it copies another piece of the image. Does anyone has a solution to this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清浅ˋ旧时光 2024-12-16 21:09:41

我知道这有点晚了,但我自己也在寻找这个解决方案,并且刚刚找到了所需的代码......

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;
}

I know this is a little late but I was looking for this solution myself too and just found the code needed...

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;
}
瑾夏年华 2024-12-16 21:09:41

好吧,这么多年过去了,我自己找到了答案,所以我只是想让其他人知道。

这非常简单,例如:

而不是:

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

我会使用:

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

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

Okay so many years after I found the answer myself, so I just wanted to let anybody else know.

It was pretty simple, example:

Instead of:

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

I would use:

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

Which would flip the part of the image horizontal.

一刻暧昧 2024-12-16 21:09:41

我用的是:

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

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

I use that:

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文