做站点时,通常要将图片缩小成合适的尺寸,jpg图片缩小比较容易,png图片如果带了透明色的话,按照jpg的方式来缩小的话,就会造成透明色损失。那么如何处理,才能保存透明色呢?

主要是利用gd库的两个方法:

  • imagecolorallocatealpha 分配颜色 + alpha
  • imagesavealpha 设置在保存 png 图像时保存完整的 alpha 通道信息

代码示例:

  1. //获取源图gd图像标识符
  2. $srcImg = imagecreatefrompng('./src.png');
  3. $srcWidth = imagesx($srcImg);
  4. $srcHeight = imagesy($srcImg);
  5. //创建新图
  6. $newWidth = round($srcWidth / 2);
  7. $newHeight = round($srcHeight / 2);
  8. $newImg = imagecreatetruecolor($newWidth, $newHeight);
  9. //分配颜色 + alpha,将颜色填充到新图上
  10. $alpha = imagecolorallocatealpha($newImg, 0, 0, 0, 127);
  11. imagefill($newImg, 0, 0, $alpha);
  12. //将源图拷贝到新图上,并设置在保存 PNG 图像时保存完整的 alpha 通道信息
  13. imagecopyresampled($newImg, $srcImg, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight);
  14. imagesavealpha($newImg, true);
  15. imagepng($newImg, './dst.png');

例子源图:

PHP保存png透明色示例源图

生成后的缩略图:

php保存png透明色示例目标图像

关于png图片的格式信息,可以参考png维基百科英文版,介绍很详细。如果对gd库方法不了解,可以参考php官网。

php缩小png图片时,不损失透明色的办法的更多相关文章

  1. Libgdx 循环绘制图片时间隔的问题

    在libgdx中使用循环绘制一张图片铺满某个区域时,有可能会遇到像素计算没有问题时,图块中间还是有约1像素的间隔,或者是本来没有间隔,做了缩放处理之后发现中间有间隔. 解法 当使用Texture加载图 ...

  2. [Android]异步加载图片,内存缓存,文件缓存,imageview显示图片时增加淡入淡出动画

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3574131.html  这个可以实现ImageView异步加载 ...

  3. 在li元素中放入img图片时li的高度问题

    在li元素中放入img图片时li的高度会比img图片的高度多出几个像素,解决这个问题只需要将img元素的css设置成vertical-align: middle;就可以解决.

  4. Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果

     Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...

  5. 图片_ _Android有效解决加载大图片时内存溢出的问题 2

    Android有效解决加载大图片时内存溢出的问题 博客分类: Android Android游戏虚拟机算法JNI 尽量不要使用setImageBitmap或 setImageResource或 Bit ...

  6. 关于生成缩略图及水印图片时出现GDI+中发生一般性错误解决方法

    System.Drawing.Image OldImage = null; oldImage = System.Drawing.Image.FromFile(ImageUrl); 使用该方法读取图片时 ...

  7. ASP.NET输出PNG图片时出现GDI+一般性错误的解决方法

    偶原来的用ASP.NET生成验证码图片时用的是JPG格式,今天想把它改成PNG格式的,结果就出现GDI+一般性错误,查了N久资料,才发现解决的办法,对分享此解决办法的网友深表感谢 Response.C ...

  8. Android开发中如何解决加载大图片时内存溢出的问题

    Android开发中如何解决加载大图片时内存溢出的问题    在Android开发过程中,我们经常会遇到加载的图片过大导致内存溢出的问题,其实类似这样的问题已经屡见不鲜了,下面将一些好的解决方案分享给 ...

  9. 使用MFC CImage类绘制PNG图片时遇到的问题

    为了测试CImage绘制PNG图片的效果,我们用截图软件截得一张360的界面,然后使用PhotoShop等工具在图片的周边加上了透明的区域,然后保存成PNG图片文件.CImage首先从文件中加载,即 ...

随机推荐

  1. vue808

    自定义键盘信息:    Vue.directive('on').keyCodes.ctrl=17;    Vue.directive('on').keyCodes.myenter=13; 数据深度监听 ...

  2. Vue百度搜索

    <!DOCTYPE html><html lang="en"><head> <meta charset="GBK"&g ...

  3. 02-zip文件打包

    package com.day1; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...

  4. babel-polyfill

    babel-polyfill Babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator.Generator.Set.Maps.Proxy.Reflec ...

  5. 基于IDEA环境下的Spark2.X程序开发

    我们选择在线安装 这个是windows下的scala,直接双击安装就可以了 安装好之后可以验证一下 这个是我本地的jdk1.8安装包,直接双击安装 安装完成后可以验证一下 https://archiv ...

  6. 通过git将本地文件上传到码云的方法

    1. 在码云上创建项目 在码云首页顶部,下图所示,右上角头像旁边的加号,鼠标移上去会显示下拉的,点击“新建项目”. 2. 安装Git 下载完成后安装即可,安装过程中没有注意事项,全部默认一直next直 ...

  7. admin源码解析以及仿照admin设计stark组件

    ---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...

  8. vue的v-for数组和对象

    v-for="(item,index) of hot" //数组遍历 v-for="(item,key,index) of cities" //对象遍历 //k ...

  9. SAPCertifiedTechnologyAssociate-SystemAdministration(SAPHANAasaDatabase)

    C_TADM55_75 SAP Certified Technology Associate - System Administration (SAP HANA as a Database) with ...

  10. css:蓝环章鱼

    许多海洋生物色彩艳丽,这次用css仿制一下蓝环章鱼的蓝环 <script type="text/javascript" src="http://cdn.bootcs ...