Я испытываю проблему, где я позволяю пользователю изменять размеры изображений в контейнере и затем должен создать получающееся изображение, которое является размером контейнера, но с изображением, измеренным и приспособленным согласно пользовательскому выбору.
Так, например, скажите, что контейнер - 400 x 200, и пользователь хочет быть в состоянии вставить эмблему, которая является 600 x 100, они могут хотеть сократить эмблему, таким образом, это соответствует и пространство отпуска наверху и основание. Я должен быть в состоянии сохранить это как изображение, которое является 400x200 с соответствующими промежутками наверху и основанием.
Что я нашел, хотя то, что, если содержимое изображения (эмблема в этом примере) простирается и вне вершины и вне права на контейнер, все прекрасно ИЛИ если это, который DOESNT расширяют или вне, хорошо, но если это простирается вне одного, а не другой тогда я становлюсь темнокожим, заполняются - или что-то как этот - видит примеры ниже...
Ниже некоторые примеры результатов, и это - код, который я использую...
$cropped = wp_imagecreatetruecolor( $frame_w, $frame_h);
$backgroundColor = imagecolorallocatealpha($cropped, 0, 0, 0, 127);
//imageantialias( $cropped, true );
//if $img_y or $img_x are negative we need to apply the value to $img_x and $img_y
//if $img_y or $img_x are positive we need to apply the value to $dest_x and $dest_y
$dest_x = strstr($img_x,'-') ? 0 : abs($img_x);//if neg is true = 0 else offset inside
$dest_y = strstr($img_y,'-') ? 0 : abs($img_y);
$img_x = strstr($img_x,'-') ? abs($img_x) : 0;//if neg is true offset outside else 0
$img_y = strstr($img_y,'-') ? abs($img_y) : 0;
$img_w = $img_w > $frame_w ? $frame_w : $img_w;
$img_h = $img_h > $frame_h ? $frame_h : $img_h;
imagecopy( $cropped, $resized, $dest_x, $dest_y, $img_x, $img_y, $img_w, $img_h);
//imagecopymerge( $cropped, $resized, $dest_x, $dest_y, $img_x, $img_y, $img_w, $img_h,100);
//imagecopyresampled( $cropped, $resized, $dest_x, $dest_y, $img_x, $img_y, $frame_w, $frame_h, $img_w, $img_h );
imagefill($cropped, 0, 0, $backgroundColor);//putting this after the copy makes any black borders transparent again unless $resized does not extend beyond both dimensions
Примеры
Image does not extend beyond top or beyond right (fine)

Image extends beyond bottom but not right (not fine)

Image extends beyond both (fine)

Image extends beyond right but not bottom (not fine)

Image Extends beyond neither (fine)

Я буквально рвал волосы, пытаясь зафиксировать это и попробовал каждую возможную комбинацию imagesavealpha, imagecopymerged, imagecolorallocatealpha, imagealphablending и т.д. я могу думать, но ничто, кажется, не фиксирует это...
Таким образом, действительно ли это - ошибка/ограничение GD? Или может кто-то там приходить к моему спасению!