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);
    }
}
    ?>
Author: Andalinmicphew, 2011-02-02

4 answers

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

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

 2
Author: Ben Rowe, 2011-02-02 01:22:16

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

/path/to/image.jpg

Вместо

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

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

 2
Author: Ben Harvey, 2011-10-26 22:01:32

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

 0
Author: Serge Stepanov, 2011-02-02 01:20:40

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

 0
Author: Ryan Bales, 2011-02-02 19:58:15