php 合成图片 透明,2020-05-19 php实现透明png多图合成
圖片合成的流程一般是,獲取圖像資源——合成——輸出。
png圖片,一般就用imagecreatefrompng()獲取資源。不過這個資源獲取后是有白底的。所以需要用imagesavealpha()進行圖像處理,得到包含有透明背景的圖像。
//原始圖像
$dst = "img/1.png";
//得到原始圖片信息
$dst_im = imagecreatefrompng($dst);
imagesavealpha($dst_im, true);
//輸出圖片
header("Content-type: image/png");
imagepng($dst_im);
資源獲取后,就是合成。合成的圖像函數一般為imagecopymerge()和imagecopy ()兩種。
imagecopymerge ()函數可以支持兩個圖像疊加時,設置疊加的透明度。imagecopy() 函數則不支持疊加透明。意思就是兩個純色塊的圖片,用imagecopymerge()的時候,可以設置疊加圖片為半透明。而imagecopy ()則直接疊加。
實際上,PHP內部源碼里,imagecopymerge()在透明度參數為100時,直接調用imagecopy()函數。然而,imagecopy函數拷貝時可以保留png圖像的原透明信息,而imagecopymerge()卻不支持圖片的本身的透明拷貝。imagecopymerge() 在合成帶有透明圖層的圖片是,會在透明區域自動填充白色。所以要進行多張自帶透明層的png圖片合成時,則需要imagecopy()函數。
imagecopymerge()合成例子:
//原始圖像
$dst = "img/1.png";
//得到原始圖片信息
$dst_im = imagecreatefrompng($dst);
$dst_info = getimagesize($dst);
//水印圖像
$src = "img/2.png";
$src_im = imagecreatefrompng($src);
$src_info = getimagesize($src);
//水印透明度
$alpha = 100;
imagesavealpha($dst_im, true);
imagesavealpha($src_im, true);
//合并水印圖片
imagecopy($dst_im,$src_im,$dst_info[0]-$src_info[0],$dst_info[1]-$src_info[1],0,0,$src_info[0],$src_info[1]);
//輸出合并后水印圖片
header("Content-type: image/png");
imagepng($dst_im);
效果圖:
image.png
imagecopymerge()合成例子:
//原始圖像
$dst = "img/1.png";
//得到原始圖片信息
$dst_im = imagecreatefrompng($dst);
$dst_info = getimagesize($dst);
//水印圖像
$src = "img/2.png";
$src_im = imagecreatefrompng($src);
$src_info = getimagesize($src);
//水印透明度
$alpha = 100;
imagesavealpha($dst_im, true);
imagesavealpha($src_im, true);
//合并水印圖片
imagecopymerge($dst_im,$src_im,$dst_info[0]-$src_info[0],$dst_info[1]-$src_info[1],0,0,$src_info[0],$src_info[1],$alpha);
//輸出合并后水印圖片
header("Content-type: image/png");
imagepng($dst_im);
效果圖:
image.png
多張png圖合成
$width = 705;
$height = 670;
$layers = array();
$layers[] = imagecreatefrompng("img/1.png");
$layers[] = imagecreatefrompng("img/2.png");
$layers[] = imagecreatefrompng("img/3.png");
$layers[] = imagecreatefrompng("img/4.png");
$image = imagecreatetruecolor($width, $height); //建立個原圖大小的畫板
$bg = imagecolorallocatealpha($image , 0 , 0 , 0 , 127);//拾取個完全透明的顏色,不要用imagecolorallocate拾色
imagefill($image , 0 , 0 , $bg); //填充
imagesavealpha($image, true); //設置保存PNG時保留透明通道信息
for ($i = 0; $i < count($layers); $i++) {
imagecopy($image, $layers[$i], 0, 0, 0, 0, $width, $height); //合成圖像
}
$filename ='img/file/'.time().'.png';
//var_dump($filename);
header('Content-type: image/png');
imagepng($image);
imagepng($image,$filename); //生成圖片
imagedestroy($image); //銷毀占用
效果圖:
image.png
總結
以上是生活随笔為你收集整理的php 合成图片 透明,2020-05-19 php实现透明png多图合成的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 威马EX5郑州充电站起火自燃 此前曾因强
 - 下一篇: 虎牙:被抬当事人所称胜诉为一审 目前在二