PHP GD imagecopyresampled () и перевернуть его по горизонтали - PullRequest
1 голос
/ 14 октября 2011

Я рендерину изображение PNG из другого изображения PNG с помощью imagecopyresampled ().Теперь я хочу, чтобы некоторые части изображения были перевернуты по горизонтали, поэтому я попробовал это:

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

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

Взято из комментария пользователя из руководства по PHP .

Это не работает в моем случае (где я копирую много частей из исходного изображения в новое), вместо этого он копирует другой кусок изображения.У кого-нибудь есть решение этого?

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Я знаю, что это немного поздно, но я тоже искал это решение и просто нашел нужный код ...

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 голосов
/ 12 ноября 2014

Хорошо, через много лет после того, как я сам нашел ответ, поэтому я просто хотел, чтобы кто-нибудь еще знал.

Это было довольно просто, пример:

Вместо:

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

Я бы использовал:

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

Что бы перевернуть часть изображения по горизонтали.

...