GD PHP повернуть изображение черной рамкой

Я пытаюсь изменить размер и повернуть изображение с помощью PHP (GD), но когда изображение поворачивается, оно добавляет черную рамку справа.

Пример изображения (до изменить размер & вращаться):
Exemple

Пример изображения (после изменить размер & вращаться):
Пример черного бордюра добавить

Вот мой код:

    $image = $_FILES["file"]["name"];
$uploadedfile = $_FILES['file']['tmp_name'];

if ($image) {

$filename = stripslashes($_FILES['file']['name']);

$i = strrpos($filename,".");
$l = strlen($filename) - $i;
$ext = substr($filename,$i+1,$l);

$extension = strtolower($ext);

if (($extension != "jpg") && ($extension != "jpeg")
&& ($extension != "png") && ($extension != "gif")) {

echo ' Unknown Image extension ';
$errors=1;
}

else {
$size=filesize($_FILES['file']['tmp_name']);

if($extension=="jpg" || $extension=="jpeg" ) {
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefromjpeg($uploadedfile);
}
else if($extension=="png") {
$uploadedfile = $_FILES['file']['tmp_name'];
$src = imagecreatefrompng($uploadedfile);
}
else  {
$src = imagecreatefromgif($uploadedfile);
}

$max_width = 175;
$max_height = 100;

$size=GetImageSize($uploadedfile);

$width_ratio = ($size[0] / $max_width);
$height_ratio = ($size[1] / $max_height);

if($width_ratio >=$height_ratio)
{
$ratio = $width_ratio;
}
else
{
$ratio = $height_ratio;
}

$new_width = ($size[0] / $ratio);
$new_height = ($size[1] / $ratio);
$tmp=imagecreatetruecolor($new_width,$new_height);

if(function_exists("exif_read_data")){
$exif = @exif_read_data($uploadedfile);

$rotateImg = imagerotate($src,0,0);

if(!empty($exif['Orientation'])) {
switch($exif['Orientation']) {
case 8:
$rotateImg = imagerotate($src,90,0);
break;
case 3:
$rotateImg = imagerotate($src,180,0);
break;
case 6:
$rotateImg = imagerotate($src,-90,0);
break;
}
}
}

imagecopyresampled($tmp,$rotateImg,0,0,0,0,($new_width-1),($new_height-1),$size[0],$size[1]);

$filename = sha1(basename( $_FILES['file']['name']));
$path = dirname(__FILE__)."/../files/pictures/".$filename;

imagejpeg($tmp,$path,100);

imagedestroy($src);
imagedestroy($rotateImg);
imagedestroy($tmp);}
}

Я попробовал некоторые модификации, такие как ответы на эти посты:
При повороте изображения с помощью gd + php появляется рамка
PHP — Поворот изображения с GD дает черные границы
Почему при повороте изображения появляются черные полосы? PHP GD

Но ничего не работает.

Пожалуйста, ребята, помогает мне.

Спасибо вам

0

Решение

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

Поворот должен выполняться первым, а не последним, поэтому переместите код поворота выше всех вычислений отношения (сразу после того, как вы объявите $size). Вам необходимо следить за поворотом на 90 / -90 градусов:

$rotated = false;
if (!empty($exif['Orientation'])) {
switch ($exif['Orientation']) {
case 8:
$src = imagerotate($src, 90, 0);
$rotated = true;
break;
case 3:
$src = imagerotate($src, 180, 0);
break;
case 6:
$src = imagerotate($src, -90, 0);
$rotated = true;
break;
}
}

Теперь вам нужно «перевернуть» значения, если ориентация изменилась:

if ($rotated) {
$width = $size[1];
$height = $size[0];
} else {
$width = $size[0];
$height = $size[1];
}

В остальной части вашего кода замените экземпляры $size[0] с $width а также $size[1] с $height исправить расчеты.

Вы могли бы также ...($new_width-1),($new_height-1)... чтобы просто ...$new_width, $new_height... для правильного размещения измененного изображения, в противном случае в нижней и нижней части результирующего изображения будет черная полоса размером 1 пиксель.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]