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);

效果图:

2ecb05c973b9

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);

效果图:

2ecb05c973b9

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); //销毁占用

效果图:

2ecb05c973b9

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个古怪的VISTA网络问题解决的坎坷经历

今天下午BOSS突然找我&#xff0c;说他的笔记本无线网络今天频繁的掉线&#xff0c;问我到底是怎么回事&#xff0c;我初步估计是TPLink无线路由器的连接数过多造成&#xff0c;也就这么说了&#xff0c;BOSS马上生气的说&#xff0c;把其他无线用户都T了&#xff0c;让他上网干…

ArcEngine 没有Esri.ArcGis.GeoAnalyst 命名空间

http://bbs.esrichina-bj.cn/ESRI/viewthread.php?tid69977&extrapage%3D1&ordertype1 AE安装的时候分为Core和Extension. Esri.ArcGis.GeoAnalyst位于Extension里面. (1)确保安装的时候是完全安装 (2) 转载于:https://www.cnblogs.com/imihiroblog/archive/2012/04/1…

微信功能“拍一拍”,都有谁在“拍”你?

全世界只有3.14 % 的人关注了爆炸吧知识微信新功能总在悄咪咪更新&#xff0c;“拍一拍”一出&#xff0c;很多小伙伴都会收到各种群里面千奇百怪的“拍一拍”&#xff0c;到底都是谁在偷偷关注你&#xff1f;真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内…

sql 触发器_一键生成某个sql的html--记录执行计划、统计信息、触发器等

概述当你获得某个sql的sql_id时&#xff0c;怎么去一键获得这个sql的一些信息呢&#xff0c;例如列的情况、执行计划等等..脚本有点长&#xff0c;建议大家用电脑来看..下面用一个简单测试来演示下&#xff0c;附脚本领取方式。1、获取sql_idSQL> select a.* from (select S…

C字符数组赋值(转)

举例如下&#xff1a; char a[10];1、定义的时候直接用字符串赋值char a[10]"hello";注意&#xff1a;不能先定义再给它赋值&#xff0c;如 char a[10]; a[10]"hello";这样是错误的&#xff01; 2、对数组中字符逐个赋值char a[10]{h,e,l,l,o}; 3、利用str…

别等了,全面「远程办公」凉了

大家好&#xff0c;我是Z哥。这是一篇迟到的文章。具体原因是&#xff0c;昨天定时发送的时候没注意已经过了0点了&#xff0c;习惯性的选了明天11点45&#xff0c;然后才发现实际变成10月9日的11&#xff1a;45了。赶紧取消重新发一下。好了&#xff0c;回到正文。不知道你是否…

PHP做闹钟APP,8款超好用的闹钟APP,专治各种赖床

这是什么神仙APP&#xff0c;我再也不怕冬天起不了床&#xff01;有了它们&#xff0c;再也不怕懒床迟到了&#xff01;好用到爆&#xff01;可爱女生闹钟(超可爱的用户界面)这界面真是太可爱了&#xff0c;软萌妹子必备啊。推荐指数&#xff1a;★★★★怪物闹钟(玩游戏才能关…

easy html5 - Jquery mobile

今天看了下jquery mobile(http://jquerymobile.com/)&#xff0c;看了后自己很兴奋&#xff1b;jquery 在web js框架上的风暴还在继续却也随着移动终端走向了mobile&#xff1b;那么jquery mobile到底包括些什么呢 首先jquery mobile是基于html5的&#xff0c;因为html5已经被默…

太漂亮了!66个高颜值的矿物晶体,吸引到你的目光了吗

全世界只有3.14 % 的人关注了爆炸吧知识1“中国皇帝”菱锰矿“中国皇帝”产自广西梧州&#xff0c;最大晶体为22厘米&#xff0c;是目前中国发现的菱锰矿中体积最大、单晶最大、质量最好的一件标本&#xff0c;在世界范围内亦属罕见。2车轮矿晶簇世界罕见的车轮矿晶簇。3祖母绿…

oracle中sum和count可以嵌套吗_【分享吧】Oracle查询转换

前言“查询转换”是Oracle解析SQL语句中重要的步骤。其原理是Oracle在解析时通过对原有SQL的等价改写&#xff0c;以达到较高执行效率的方式。上图展示了SQL的执行过程&#xff0c;当客户提交的语句经过解析后&#xff0c;在提交给优化器之前会进行一个查询转换的步骤。在这个步…

如何正确地部署防火墙?

防火墙在实际的部署应用过程当中&#xff0c;经常部署在网关的位置&#xff0c;也就是经常部署在网内和网外的一个"中间分隔点"上&#xff0c;而就是在这样一个部署的环境中&#xff0c;也还存在着多种方式&#xff0c;且存在着许多"陷阱"&#xff0c;本文…

extjs 验证消息不显示

var linkIdthis.myform.findField("linkId");//获得该属性 var valuelinkId.getValue().trim();//得到值 if(value){ this.form.cbo.isValid(false);//验证失败,显示错误信息 this.form.cbo.markInvalid(请选择xxx!); …

IEnumerable.OrderBy().First() 在 .netcore 3.1 中是否做了优化?

咨询区 Matthew Watson&#xff1a;我记得 .net core 中有一个版本对下面的场景做了一个优化&#xff0c;代码如下&#xff1a;int smallest new[]{ 7, 2, 4, 6, 0, 1, 6, 9, 8 }.OrderBy(i > i).First();在很早之前它的时间复杂度是 O(N.Log(N))&#xff0c;现在已经优化成…

[转]软件测试演义——中高级系列(序)

[转]软件测试演义——中高级系列&#xff08;序&#xff09; 2015-06-11 转自&#xff1a;软件测试演义——中高级系列&#xff08;序&#xff09; 目前&#xff0c;软件测试团队主要集中在大型外资企业&#xff0c;国内软件测试水平还处在发展阶段&#xff0c;人们对测试理解…

男人是大猪蹄子的证据找到了!

1 老师&#xff01;2 您倒也不必如此诚实3 哈哈哈哈哈哈这也太显眼了4 圆的面积其实可以这样算5 喵&#xff1a;进不去......好烦&#xff01;&#xff01;6 狗子&#xff1a;好好扔&#xff0c;砸我干嘛&#xff1f;你到底会不会玩&#xff1f;&#xff01;7 男人是大猪蹄子的…

可视化的数据结构和算法

分享自: http://coolshell.cn/articles/4671.html/comment-page-1#comment-52802 还记得之前发布过的那个关于可视化排序的文章吗&#xff1f;在网上又看到了一个旧金山大学David Galles做的各种可视化的数据结构和基本算法的主页&#xff0c;网址在这里&#xff0c;大家可以看…

set-cookie 和 cookie 的区别_Go Web 编程如何确保Cookie数据的安全传输

什么是CookieCookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据&#xff0c;它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常&#xff0c;它用于告知服务端两个请求是否来自同一浏览器&#xff0c;如保持用户的登…

去除箭头

cell.selectionStyle UITableViewCellSelectionStyleNone;//去除箭头转载于:https://www.cnblogs.com/chivas/archive/2012/04/22/2464915.html

使用C#快速生成顺序GUID

前言通常&#xff0c;我们采用数值ID(long)/GUID作为全局唯一标识符。但是&#xff0c;在多线程、高并发情况下&#xff0c;由应用程序生成数值ID容易产生重复&#xff0c;而由数据库生成又会造成性能瓶颈。而使用Guid.NewGuid()生成的GUID虽然不会重复&#xff0c;但是它是无序…

java符号%3e%3e是什么意思,终于找到了!有了它你就可以读懂字节码了!

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼0x80 ior 将栈顶两int型数值作“按位或”并将结果压入栈顶0x81 lor 将栈顶两long型数值作“按位或”并将结果压入栈顶0x82 ixor 将栈顶两int型数值作“按位异或”并将结果压入栈顶0x83 lxor 将栈顶两long型数值作“按位异或”并将结…