Как убрать черные полосы после обрезки изображения?

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
Делаю обрезку изображения по заданным размерам. По краям появляются черные полосы.
Причем пара нюансов:
1. появляется только на хостинге. На локалке нет, поэтому выловить не могу - проблемы для пользователей не хочу создавать различными дебагами и т.п.
2. полосы либо сверху и снизу, либо справа и слева. От чего зависит не знаю. Но симметрично.
Полосы черные, тонкие.
Выкладываю код с уже подстановленными размерами (что приходит из js:(
PHP:
// resize the original image to size of editor
$resizedImage = imagecreatetruecolor(900, 490);
imagecopyresampled($resizedImage, $source_image, 0, 0, 0, 0, 900, 490, 900, 490);

// rotate the rezized image
$rotated_image = imagerotate($resizedImage, -0, 0);

// find new width & height of rotated image
$rotated_width = imagesx($rotated_image);
$rotated_height = imagesy($rotated_image);

// diff between rotated & original sizes
$dx = $rotated_width - 900;
$dy = $rotated_height - 490;

// crop rotated image to fit into original rezized rectangle
$cropped_rotated_image = imagecreatetruecolor(900, 490);
imagecolortransparent($cropped_rotated_image, imagecolorallocate($cropped_rotated_image, 0, 0, 0));
imagecopyresampled($cropped_rotated_image, $rotated_image, 0, 0, $dx / 2, $dy / 2, 900, 490, 900, 490);

// crop image into selected area
$final_image = imagecreatetruecolor(653, 490);
imagecolortransparent($final_image, imagecolorallocate($final_image, 0, 0, 0));
imagecopyresampled($final_image, $cropped_rotated_image, 0, 0, 123, 0, 653, 490, 653, 490);


// finally output png image                                   
imagejpeg( $final_image,  ROOT_DIR .'/'. $this->path .'crop_'. $this->base_img_name, $config['img_obj_quality'] );

Пробовал вверху добавлять:
PHP:
 imagecolortransparent($resizedImage, imagecolorallocate($resizedImage, 0, 0, 0));
Не помогло.
 
версии php разные?
 
Ты бы хоть phpinfo выложил
 
Подскажите по imagecopyresampled.
PHP:
imagecopyresampled(resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h);
Возник вопрос по переменным: int $dst_w , int $dst_h , int $src_w , int $src_h
я так понимаю, при обрезке они должны быть одинаковыми. Т.е. берем размер новой области с координатам 0, 0 и вставляем туда область из ресурсного изображения с координатами обрезки (т.е. начало обрезки). Но ширина и высота обеих областей одинакова, чтобы изображение не растягивалось. Или нет?
Вроде как Для просмотра ссылки Войди или Зарегистрируйся нарисовано даже, что это за размеры. Вроде я правильно думаю.
 
Назад
Сверху