imagecopyresampled создает черный ящик, но не пересэмплирует изображение - PullRequest
2 голосов
/ 02 февраля 2011

Я работаю, чтобы изменить размеры и изменить размер некоторых изображений 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 ]

2 голосов
/ 27 октября 2011

Я обнаружил, что мне нужно было указать полный путь к изображению, не URL, т.е.

/ путь / к / image.jpg

вместо

http://www.blah.com/image.jpg

, чтобы заставить это работать должным образом. Надеюсь, это кому-нибудь поможет.

2 голосов
/ 02 февраля 2011

Во-первых, убедитесь, что у вас включен отчет об ошибках. Также убедитесь, что он может найти исходное изображение "SandyCayBaribbeanbeach.jpg".

Простая проверка if(file_exists()) перед изменением размера изображения поможет отловить ошибки.

0 голосов
/ 02 февраля 2011

Я также некоторое время боролся с этим в части своего кода недавно и обнаружил, что imagecopyresampled даже вернет 1, если размеры не определены.Убедитесь, что высота и ширина источника установлены.

0 голосов
/ 02 февраля 2011

Дважды проверьте, чтобы убедиться, что ваше исходное изображение действительно является JPEG. Если вы используете Windows, откройте ее в MS Paint и повторно сохраните в формате JPEG. Это поможет исключить возможность использования другого формата.

...