PHP + GD создает случайные черные эскизы - PullRequest
2 голосов
/ 12 июня 2010

Эта функция создает несколько случайных черных изображений, таких как ... 10% времени, это не много, но ... вы знаете ... не должно происходить.

class ImgResizer {
private $originalFile = '';
public function __construct($originalFile = '') {
    $this -> originalFile = $originalFile;
}
public function resize($newWidth, $targetFile) {
    if (empty($newWidth) || empty($targetFile)) {
        return false;
    }
    $src = imagecreatefromjpeg($this -> originalFile);
    list($width, $height) = getimagesize($this -> originalFile);
    $newHeight = ($height / $width) * $newWidth;

    if ($newHeight<'335') {
        //$newHeight='335';
    }
    $tmp = imagecreatetruecolor($newWidth, $newHeight);
    #$tmp = imagecreate($newWidth, $newHeight);
    imagecopyresampled($tmp, $src, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    if (file_exists($targetFile)) {
        unlink($targetFile);
    }
    imagejpeg($tmp, $targetFile, 85); // 85 is my choice, make it between 0 – 100 for output image quality with 100 being the most luxurious
}

}

нет ошибок в error_log.Вот gd_info ():

Array(
[GD Version] => bundled (2.0.34 compatible)
[FreeType Support] => 
[T1Lib Support] => 
[GIF Read Support] => 1
[GIF Create Support] => 1
[JPG Support] => 1
[PNG Support] => 1
[WBMP Support] => 1
[XPM Support] => 1
[XBM Support] => 1
[JIS-mapped Japanese Font Support] => )1

сервер является linux.Функция вызывается следующим образом: предполагается, что $ imagen является фактическим исходным изображением, а $ imagendestino - это путь и имя файла нового эскиза.

if (!file_exists($imagendestino)) {
        $work = new ImgResizer($imagen);
        $work -> resize(475, $imagendestino);
    }

Заранее спасибо!

1 Ответ

1 голос
/ 07 июля 2011

Скорее всего, вы передаете изображение не в формате JPEG.

Размер JPEG хорошо изменен, однако, поскольку функция не может прочитать другой формат изображения, это приводит к недопустимому изображению. В результате получается пустое изображение, то есть все нули, это дает черное изображение. создатель

imagecreatetruecolor($newWidth, $newHeight);

когда я запускаю ваш класс, передавая ему файл изображения PNG, он выдает эти предупреждения и создает черное изображение:

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: 'filename' is not a valid JPEG file
Warning: imagecopyresampled(): supplied argument is not a valid Image resource

скорее всего, у вас отключено предупреждение, поэтому вы не получаете эти сообщения.

попробуйте использовать

imagecreatefromstring(file_get_contents(filename))

вместо

imagecreatefromjpeg(filename)

таким образом, GD автоматически определяет тип файла на основе его заголовка.

...