PHP – Поворот изображения с помощью GD дает черные границы

Я пытаюсь повернуть и сохранить изображение. Вращение основано на данных EXIF. Я пробовал следующее: все они обводят черную рамку:

введите описание изображения здесь

Где оригинал выглядит так:

$orientation = array_values([0, 0, 0, 180, 0, 0, -90, 0, 90])[@exif_read_data($imagePath)['Orientation'] ?: 0]; $source = imagecreatefromjpeg($imagePath); $resource = imagerotate($source, $orientation, 0); imagejpeg($resource, $image, 100); 

Я также попытался добавить imagealphablending($resource, true); и imagesavealpha($resource, true); как предлагается на черном фоне при вращении изображения с PHP , но безрезультатно; граница остается.

Затем я попытался создать изображение с помощью imagecreatetruecolor() :

 $imageSizes = getimagesize($image); $oldWidth = $imageSizes[0]; $oldHeight = $imageSizes[1]; $orientation = array_values([0, 0, 0, 180, 0, 0, -90, 0, 90])[@exif_read_data($image)['Orientation'] ?: 0]; $source = imagecreatefromjpeg($imagePath); $resource = imagerotate($source, $orientation, 0); $newWidth = $oldWidth; $newHeight = $oldHeight; if ($orientation !== 180 && $orientation !== 0) { $newWidth = $oldHeight; $newHeight = $oldWidth; } $imageResized = imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled ($imageResized, $resource, 0, 0, 0, 0, $newWidth, $newHeight, $oldWidth, $oldHeight); imagejpeg($imageResized, $image, 100); 

Но я просто не могу заставить его работать. Кто-нибудь может мне помочь?

Я нашел эту проблему сегодня в PHP для Windows. Кажется, что границы только добавляются, когда вы выполняете поворот на 0 или 360 градусов. Я не получаю границы с поворотом на 180 градусов. Итак, просто проверьте, нет ли нулевой ориентации, и только при необходимости поворачивайте.

... if ($orientation !== 0) $resource = imagerotate($source, $orientation, 0); else $resource = $source; end ...

это не ответ … он может вам помочь, или это может не быть

я проверил ваш код и отлично работал для меня введите описание изображения здесь

также, используя ваш образ, он не даст мне вашу проблему.

как я вижу, ваш образ результата, который с черной рамкой, имеет разницу с оригиналом. Посмотрите на левую границу, верхняя собака обрезается, и эта разница – черная рамка