imagecopyresampled создает черный ящик, но не пересчитывает изображение
Я работаю над изменением размера и повторной выборкой некоторых изображений jpeg с помощью PHP. Он принимает любое изображение размером более 500 пикселей на 500 пикселей и делает самую большую сторону 500 пикселей. Это должно быть относительно просто, но каждый раз, когда я запускаю скрипт, он создает черный jpeg. Созданный jpeg имеет правильные размеры, но не включает изображение с измененным размером. Библиотека GD включена, и я убедился, что она находит исходное изображение. Я смотрел на этот блок кода полтора дня безрезультатно, чем я не являюсь видишь?
<?php
$testimage = 'SandyCayCaribbeanbeach.jpg';
$testfolder = "testimage/testimage.jpg";
list($orgwidth, $orgheight, $type, $attr) = getimagesize($testimage);
echo "org. width " . $orgwidth . "px" . "<br />";
echo "org. height " . $orgheight . "px" . "<br />";
if($orgwidth > 500 || $orgheight > 500){
if($orgwidth > $orgheight){
header('Content-type: image/jpeg');
$ratio = $orgwidth/500;
$newwidth = floor($orgwidth/$ratio);
$newheight = floor($orgheight/$ratio);
$image_p = imagecreatetruecolor($newwidth, $newheight);
$image = imagecreatefromjpeg($testimage);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($image_p, $testfolder, 100);
}
else{
header('Content-type: image/jpeg');
$ratio = $orgheight/500;
$newheight = floor($orgheight/$ratio);
$newwidth = floor($orgwidth/$ratio);
$image_p = imagecreatetruecolor($newwidth, $newheight);
$image = imagecreatefromjpeg($testimage);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
imagejpeg($image_p, $testfolder, 100);
}
}
?>
4 answers
Сначала убедитесь, что у вас включено сообщение об ошибках. Также убедитесь, что он может найти исходное изображение"SandyCayBaribbeanbeach.jpg ".
Простая проверка if(file_exists())
перед обработкой изменения размера изображения поможет устранить ошибки.
Я обнаружил, что мне нужно указать полный путь к изображению, а не URL, т.Е.
/path/to/image.jpg
Вместо
Чтобы заставить это работать должным образом. Надеюсь, это кому-то поможет.
Дважды проверьте, действительно ли ваше исходное изображение является JPEG. Если вы используете Windows, откройте его в MS Paint и повторно сохраните в формате JPEG. Это поможет исключить возможность того, что это будет другой формат.
Недавно я также некоторое время боролся с этим в части своего кода и обнаружил, что imagecopyresampled даже вернет 1, если размеры не определены. Убедитесь, что заданы исходные высота и ширина.