преобразовать JPG в PNG и сделать цвет прозрачным в нем - PullRequest
2 голосов
/ 26 декабря 2011

В PHP я пытаюсь обработать изображение, то есть я пытаюсь сделать окружающий цвет прозрачным в файле jpg.Кстати, я использую библиотеку GD.

Я могу напрямую вывести изображение, преобразовав его в png, используя функции imagecreatefromjpeg и imagepng.Но я не могу найти способ сделать указанный цвет прозрачным.Кроме того, некоторые изображения имеют более светлые серые артефакты вокруг черной графики, созданные во время сохранения.Можно ли как-нибудь включить их?

Я немного растерялся.Я нашел несколько ответов, чтобы сделать цвет прозрачным на изображении, но я не знаю, как сначала преобразовать изображение, не сохраняя его на сервере, а затем обработать его.

Есть идеи?

РЕДАКТИРОВАТЬ: Вот мой код до сих пор.Мне удалось сделать указанный цвет прозрачным, но я пока не могу заставить его обнаруживать окружающий.

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

Есть ли какой-либо способопределить, является ли изображение png / gif уже прозрачным?Мой код закрашивает прозрачные части в черный для этих файлов.

$file = 'images/18.jpg';
$specs = getimagesize($file);

if($specs[2] == 1) $img = imagecreatefromgif($file);        //gif
elseif($specs[2] == 2) $img = imagecreatefromjpeg($file);   //jpg
elseif($specs[2] == 3) $img = imagecreatefrompng($file);    //png
else exit('unsupported file type!');

$newimg = imagecreatetruecolor(imagesx($img), imagesy($img));
// create a new image with the size of the old one
imagecopy($newimg,$img,0,0,0,0,imagesx($img),imagesy($img));
// copy the old one

imagedestroy($img);
// free the memory

$white = imagecolorallocate($newimg,255,255,255);
imagecolortransparent($newimg,$white);
// make white pixels transparent

header('Content-Type: image/png');
imagepng($newimg);
imagedestroy($newimg);
// and finally output the new image

1 Ответ

1 голос
/ 26 декабря 2011

Вы можете установить прозрачный цвет с помощью функции imagecolortransparent .

...