php 网页 透明背景图片,php 处理透明背景的图片时的问题
PHP图象处理之透明背景的gif和png图片的一些问题
1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况。
解决方法:使用 imagesavealpha ($image, true),此函数是针对png格式的.
PHP
$im=imagecreatefrompng("demo_1.png");
imagesavealpha($im, true);//设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息。
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
1
2
3
4
5
6
7
$im=imagecreatefrompng("demo_1.png");
imagesavealpha($im,true);//设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息。
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
注意一点:不是所有的浏览器都支持 alpha 通道,如果在你的浏览器上碰到问题,试着用兼容 alpha 通道的浏览器(例如最新版的 Mozilla)重新加载脚本。
经测试,在IE中显示效果不理想(但图片仍然是透明的,保存下来看下就知道),背景变成了灰色.
2,在处理(比如缩小,剪切)有透明背景的gif和png图片然后输出时,图片透明部分变成了黑色。
示例代码如下:
PHP
$size = 300;
$image=imagecreatetruecolor($size, $size);//创建图片
$back =imagecolorallocatealpha($image, 255, 255, 255,127);//加透明颜色,其实好象没什么效果。-_-!
//读取图片
$im=imagecreatefrompng("demo_1.png");
imagecopyresampled($image,$im,10,20,0,0,128,128,128,128);//合拼图片
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
1
2
3
4
5
6
7
8
9
10
11
12
$size=300;
$image=imagecreatetruecolor($size,$size);//创建图片
$back=imagecolorallocatealpha($image,255,255,255,127);//加透明颜色,其实好象没什么效果。-_-!
//读取图片
$im=imagecreatefrompng("demo_1.png");
imagecopyresampled($image,$im,10,20,0,0,128,128,128,128);//合拼图片
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
效果是图片背景变成了黑色。
解决办法:使用imagecreate()而不是用imagecreatetruecolor()创建图片。
因为imagecreatetruecolor()返回一个图像标识符,代表了一幅大小为 x_size 和 y_size 的黑色图像,
看下帮助手册就知道了。
但这种方法仍然有bug,用于png时,png有部分颜色失去,变成了透明。
解决办法:未知,有知道的告诉我一声,在下先谢谢了。
3.php生产透明背景图片
PHP
$wite = ImageColorAllocate($ni,255,255,255);//填充的背景色你可以重新指定,我用的是白色
imagefilledrectangle($ni, 0, 0, $dstW, $dstH, $wite);
ImageColorTransparent($ni, $wite);
?>
1
2
3
4
5
$wite=ImageColorAllocate($ni,255,255,255);//填充的背景色你可以重新指定,我用的是白色
imagefilledrectangle($ni,0,0,$dstW,$dstH,$wite);
ImageColorTransparent($ni,$wite);
?>
不过现在的方法还不是太理想。
2的bug解决办法
PHP
//创建透明画布
$im_out =imagecreatetruecolor($imgcreat_x, $imgcreat_y);
imagealphablending($im_out, true);
imagesavealpha($im_out, true);
$trans_colour = imagecolorallocatealpha($im_out, 0, 0, 0, 127);
imagefill($im_out, 0, 0, $trans_colour);
ImageCopyResized($im_out, $im, 0,0, 0, 0, $img_x, $img_y, $img[0], $img[1]);
imagepng($im_out);
?>
1
2
3
4
5
6
7
8
9
10
//创建透明画布
$im_out=imagecreatetruecolor($imgcreat_x,$imgcreat_y);
imagealphablending($im_out,true);
imagesavealpha($im_out,true);
$trans_colour=imagecolorallocatealpha($im_out,0,0,0,127);
imagefill($im_out,0,0,$trans_colour);
ImageCopyResized($im_out,$im,0,0,0,0,$img_x,$img_y,$img[0],$img[1]);
imagepng($im_out);
?>
以下是处理透明的3个必须了解的函数
imagealphablending
此函数,开启或关闭一个真彩色图像资源的混色模式。开启与关闭混合模式有什么区别呢?如果不涉及透明度的问题,两个模式没什么区别,但是如果是在一张画布上画一条透明颜色的线,不同的混合模式将出现不同的效果,如果混合模式开启,则透明线的颜色会与原背景中的颜色叠加,计算出新的颜色,显示出来,如果混合模式关闭,则透明线的颜色直接覆盖到画布中对应位置的颜色值。
简单来说,开启混合模式,颜色叠加,关闭混合模式,颜色覆盖。
imagecolorallocatealpha
类似于拾色器的功能,就是生成一个颜色, 的行为和 imagecolorallocate 相同,但多了一个额外的透明度参数 alpha,其值从 0 到 127。0 表示完全不透明,127 表示完全透明。
imagesavealpha
设置标记以在保存 PNG 图像时保存完整的 alpha 通道信息,如果你想保存一个透明的png图标,这个函数是必要的。
给个生成300×300完全透明PNG的例子,
PHP
$block=imagecreatetruecolor(300,300);//建立一个画布
$c=imagecolorallocatealpha($block , 0 , 0 , 0 ,127);//拾取一个完全透明的颜色
imagealphablending($block ,false);//关闭混合模式,以便透明颜色能覆盖原画布
imagefill($block , 0 , 0, $c);//填充
imagesavealpha($block ,true);//设置保存PNG时保留透明通道信息
imagepng($block ,'e.png');//生成图片
?>
1
2
3
4
5
6
7
8
$block=imagecreatetruecolor(300,300);//建立一个画布
$c=imagecolorallocatealpha($block,0,0,0,127);//拾取一个完全透明的颜色
imagealphablending($block,false);//关闭混合模式,以便透明颜色能覆盖原画布
imagefill($block,0,0,$c);//填充
imagesavealpha($block,true);//设置保存PNG时保留透明通道信息
imagepng($block,'e.png');//生成图片
?>
另一种建立透明PNG的方法 , 使用imagecolortransparent设置图片的透明色属性,也就是把图片上的某个颜色设置成透明色。
PHP
$block= imagecreatetruecolor(300 ,300);//建立一个真彩色画布
$white= imagecolorallocate($block , 255 , 255 ,255);//拾取白色
imagefill($block , 0 , 0, $white);//把画布染成白色
imagecolortransparent($block ,$white );//把图片中白色设置为透明色
//imagesavealpha($block , false);
imagepng($block ,'e.png');//生成图片
?>
1
2
3
4
5
6
7
8
$block=imagecreatetruecolor(300,300);//建立一个真彩色画布
$white=imagecolorallocate($block,255,255,255);//拾取白色
imagefill($block,0,0,$white);//把画布染成白色
imagecolortransparent($block,$white);//把图片中白色设置为透明色
//imagesavealpha($block , false);
imagepng($block,'e.png');//生成图片
?>
php 网页 透明背景图片,php 处理透明背景的图片时的问题相关推荐
- html引入png不显示透明北京,解决在网页上显示PNG图片底色不透明的方法
来源: 网易博客 类别: 编程 作者: 阿拉蕾 发布时间: 2009-9-7 22:09:18 很多时间,我们需要在网页上插入一些没有底色,只有轮廓的图片,而常用的底色透明的图片的有GIF和PNG,如 ...
- css只设置背景图片半透明,css3实现背景图片半透明内容不透明的方法示例
上一个博客做登陆的页面是遇到的问题,突然想使用这种背景图片透明,而内容不透明的效果,这里我就说一说我的两个思路吧. 效果展示: 内容半透明 内容不透明 最常见的做法事设置元素的opacity,这种设置 ...
- OpenCV技巧 | 常用格式图片保存为透明背景图片(附Python源码)-教你轻松制作Logo
导读 本文主要介绍使用OpenCV将常用格式图片保存为透明背景图片的方法与实现代码. 实现目标 本文的目标有如下两个: ① 将常见格式[jpg/png/bmp]白色背景图片转换保存为透明背景图片: ② ...
- android 黑色透明背景,解决Android png透明图片转jpg时背景变黑的问题
在做view保存图片后,压缩格式转为jpg的时候出现了黑色背景,其根本原因在于透明背景时背景的情况下,转换为jpg的时候会变成黑色背景,原因是PNG支持透明图而 JPG格式不支持透明背景. 我们的解决 ...
- php 去掉图片背景透明背景图片,php 处理透明背景的图片时的问题
PHP图象处理之透明背景的gif和png图片的一些问题 1,直接读取有透明背景的PNG格式文件,然后直接输出,背景变成了黑色,gif则没有这种情况. 解决方法:使用 imagesavealpha ($ ...
- 图片怎么做成透明背景?如何把图片改成透明底?
平时在下载图片素材的时候,会遇到不是透明底背景的问题,这时候会使用ps的就可以通过ps来处理,但是也有不少小伙伴不知道怎么把图片转化透明底.那么下面就教给大家一个图片背景变透明的方法,使用在线图片去底 ...
- 解决在网页上显示PNG图片底色不透明的方法
来源: 网易博客 类别: 编程 作者: 阿拉蕾 发布时间: 2009-9-7 22:09:18 很多时间,我们需要在网页上插入一些没有底色,只有轮廓的图片,而常用的底色透明的图片的有GIF和PNG,如 ...
- CSS书写优美的文字样式(透明、模糊、镂空、渐变、图片背景文字)
前言 做页面涉及字体的时候,最多就是换个color换个font-family,总是觉得不够华丽美艳,这时就需要我们自己动手丰衣足食的去"创造"一些css样式字体呢? 透明文字 用r ...
- C#系列---⑥如何制作背景透明的ico图标、如何将图片白色背景转换为透明背景
我们在做软件的时候为了提高用户的体验度,我们更倾向于利用图片向用户展示我们各个模块的功能,这样既美观简洁又快速上手.那如何将我们喜欢的图片制作成透明背景的ico图标呢,下面将我查到的方法分享给大家,站 ...
最新文章
- 基于Flink SQL构建流批一体实时数仓
- GDCM:gdcm::Printer的测试程序
- MongoDB基本应用操作整理
- 外键 级联操作 mysql
- 用simulink分析傅里叶变换、短时傅里叶变换和小波变换
- php 整型,php整型就是整数
- Jmeter 常用断言使用
- PHP操控Excel视频教程
- java中控指纹仪_java 中控URU4500指纹仪开发
- STM32硬件编程_学习思路
- 树莓派+英特尔神经网络计算棒
- Unity3D 2D设计小游戏移动幻影的实现
- C/C++编程:trivial和non-trivial
- 诗歌(8)—梅花二首(其二)
- Python输出16进制不带0x补零,整数转16进制,字符串转16进制
- 二、考研数据结构笔记——绪论(理解数据结构,算法,时间复杂度计算做题技巧)
- 写给通信人的“失业”生存指南
- Java API--IO流整理
- faker和劫的图片_LOLS7faker劫出装顺序是怎么样
- 2022年必读的10本经管好书
热门文章
- 我听到了一个熟息的GuanDan声音
- 飞鸽传书2012是否发布了?
- 调整的飞秋官网幅度还非常的大
- 微软收购企业群组通讯软件商Parlano
- .NET环境下水晶报表使用总
- VC+ADO+Access2000数据库文件密码的设置和修改
- 如何能能够学好软件编程技术
- php怎么获得产品id,php – 如何获取Woocommerce产品中的Variation ID
- 实变函数与泛函分析课本pdf_实变函数与泛函分析
- python列表内元素求和_在Python中将列表的每个元素与另一个列表的每个元素相乘/相加/相除的有效方法...