需要将这三种颜色的点分别提取出来,并背景透明化存成独立文件。
之前处理图片的时候,也给他做过一次背景透明化的东西,用gd库的imagecolortransparent清理背景色。
<?php
$image = imagecreatefromgif('totrans.gif');
$dim = array(imagesx($image), imagesy($image));
var_dump($dim);
$im = imagecreatetruecolor($dim[0], $dim[1]);
$bg = imagecolorallocate($im, 255,255,255);
imagecopyresampled($im, $image, 0, 0, 0, 0, $dim[0], $dim[1], $dim[0], $dim[1]);
$white = imagecolorallocate($im, 255,255,255);
imagecolortransparent($im, $white);
imagegif($im, 'trans.gif');?>
但是这次分色的时候,发现imagegif出来gif颜色有问题。生成了好几次,觉得有可能是gif色库的问题。印象中标准gif只能描述256种颜色,所以需要一个类似于bmp的调色板的东西。
用imagepng生成之后,继续去颜色,然后列出一个表格:
original: gif : png #93B1FD : #94B2FC : #93B1FD #B6CBFE : #B4CAFC : #B6CBFE #D9E4FE : #DCE6FC : #D9E4FE
虽然png的颜色没问题,但是给他之后,居然ps没法识别背景的透明化。
突然想到了 ImageMagick。
有打算用imagick或者magickwand for php来试试
但是有点不大靠谱,没时间翻文档。
突然想到ImageMagick的一个二进制程序 convert
印象中见有人用它做过透明化的处理。
先把gd代码的透明化给注视掉,让背景色全为白色,然后上网查了下,
E:\sskaje>convert 4_1.png -background transparent -transparent white 5_1.png然后把图给他,测试没问题。
php代码:
<?php
/*
original: gif : png
#93B1FD : #94B2FC : #93B1FD
#B6CBFE : #B4CAFC : #B6CBFE
#D9E4FE : #DCE6FC : #D9E4FE
transparent the background with imagemagick/convert:
E:\sskaje>convert 4_1.png -background transparent -transparent white 5_1.png
*/
$image = imagecreatefromgif('3.gif');
$dim = array(imagesx($image), imagesy($image));
$prefix = '4_';
$im = imagecreatetruecolor($dim[0], $dim[1]);
$bg = imagecolorallocate($im, 255,255,255);
$white = imagecolorallocate($im, 255,255,255);
$red = imagecolorallocate($im, 255, 0, 0);
$layers = array(
1 => array(
imagecolorallocate($im, 0x93,0xb1,0xfd),
0x93B1FD,
),
2 => array(
imagecolorallocate($im, 0xb6,0xcb,0xfe),
0xB6CBFE,
),
3 => array(
imagecolorallocate($im, 0xd9,0xe4,0xfe),
0xD9E4FE,
),
);
foreach ($layers as $k=>$v)
{
echo $k, "\n";
imagecopyresampled($im, $image, 0, 0, 0, 0, $dim[0], $dim[1], $dim[0], $dim[1]);
for ($i=0; $i<$dim[0]; $i++)
{
for ($j=0; $j<$dim[1]; $j++)
{
if (imagecolorat($im, $i, $j) != $v[1])
{
imagefill($im, $i, $j, $white);
}
else
{
imagefill($im, $i, $j, $v[0]);
}
}
}
#imagecolortransparent($im, $white);
#imagegif($im, $prefix.$k.'.gif');
imagepng($im, $prefix.$k.'.png');
}?>
No comments:
Post a Comment