Преобразование PNG в JPG с GD2 .. проблема прозрачности - PullRequest
1 голос
/ 15 марта 2011

У меня есть файл image.png с белым фоном и несколькими надписями над ним.

Я пытался конвертировать изображение в JPG:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagejpeg($resource); //> I TRIED WITH QUALITY = 100 TOO

Проблема в том, что png получил прозрачность, теперь jpg получил довольно большую черную зону. Вот как выглядит JPG:

http://img861.imageshack.us/img861/20/context.jpg

Есть ли способ решить проблему?

Редактировать1:

По предложению Abiusx я тоже попробовал:

$data = file_get_contents('image.png');
$resource = imagecreatefromstring($data);
imagealphablending($data, false);
imagesavealpha($data, true);
imagejpeg($resource);

Но результат был тот же. Пожалуйста, обратите внимание. Исходное изображение .png:

http://www.tipradar.com/wp-content/uploads/2010/02/Quicktime.png

Спасибо комментарию Патрика: вот хитрость: GD! Преобразование изображения в формате png в формат JPEG и создание альфа-канала по умолчанию белым, а не черным

Ответы [ 2 ]

0 голосов
/ 15 марта 2011

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

function Resize($ImageFile,$OriginalFile)
{
    $ext=basename($OriginalFile);
    $ext=explode(".",$ext);
    $ext=array_pop($ext);
    $ext=strtolower($ext);
    if ($ext=="jpg" or $ext=="jpeg" or $ext=="jpe")
        $img=imagecreatefromjpeg($ImageFile);
    elseif ($ext=="png")
        $img=imagecreatefrompng($ImageFile);
    elseif ($ext=="gif")
        $img=imagecreatefromgif($ImageFile);
    else
        return false;
    list($w,$h)=getimagesize($ImageFile);
    $dstimg=imagecreatetruecolor(140,100);

    imagealphablending($dstimg, false);
    imagecopyresampled($dstimg,$img,0,0,0,0,140,100,$w,$h);
    imagesavealpha($dstimg, true);
    imagepng($dstimg,$ImageFile);
    return true;
}
...