#php #image #gd #image-manipulation
#php #изображение #gd #обработка изображений
Вопрос:
Я визуализирую изображение 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.
В моем случае это не работает (когда я копирую много фрагментов из исходного изображения в новое), вместо этого он копирует другой фрагмент изображения. У кого-нибудь есть решение для этого?
Ответ №1:
Я знаю, что это немного поздно, но я тоже искал это решение и просто нашел необходимый код…
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;
}
Комментарии:
1. Спасибо за ваш ответ, Люк. Я не знаю, как это использовать, хотя, поскольку мое изображение создано из большого количества изображений, ваша функция выглядит так, как будто она переворачивает все изображение. Что мне нужно, так это часть изображения, которую нужно перевернуть. Нравится эта часть:
imagecopy($output, $input, 0,8, 44,20, 4,12);
2. В основном этот код выполняет построчную и / или столбцовую пиксельную копию исходного изображения в пункт назначения при инвертировании осей x, y или обеих осей
Ответ №2:
Хорошо, прошло так много лет после того, как я сам нашел ответ, поэтому я просто хотел, чтобы кто-нибудь еще знал.
Это было довольно просто, пример:
Вместо:
imagecopy($output, $input, 8, 20, 4, 20, 4, 12)
Я бы использовал:
imagecopyresampled($output, $input, 8, 20, (8 - 1), 20, 4, 12, 0 - 4, 12);
Что перевернуло бы часть изображения по горизонтали.
Ответ №3:
Я использую это:
imageflip ( resource $image , int $mode ) : bool