【php】png 图片压缩 透明底色变黑
需要使用gd库的方法 php需要引入gd扩展支持
/*
* 图片压缩
----------------------------------------------------------------------
函数:调整图片尺寸或生成缩略图
返回:True/False
参数:
$Image 需要调整的图片(含路径)
$Dw=450 调整时最大宽度;缩略图时的绝对宽度
$Dh=450 调整时最大高度;缩略图时的绝对高度
$Type=1 1,调整尺寸; 2,生成缩略图
$path='img/';//路径
$phtypes=array(
'img/gif',
'img/jpg',
'img/jpeg',
'img/bmp',
'img/pjpeg',
'img/x-png'
返回图片名称,不含路径
);
*/
public function Img($Image,$exif=0,$Dw=450,$Dh=450,$Type=1){
if(!file_exists($Image)){
return false;
}
//如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值
IF($Type!=1){
copy($Image,str_replace(".","_x.",$Image));
$Image=str_replace(".","_x.",$Image);
}
//取得文件的类型,根据不同的类型建立不同的对象
$ImgInfo=getimagesize($Image);
switch($ImgInfo[2]){
case 1:
$Img = @imagecreatefromgif($Image);
Break;
case 2:
$Img = @imagecreatefromjpeg($Image);
Break;
case 3:
$Img = @imagecreatefrompng($Image);
Break;
}
//如果对象没有创建成功,则说明非图片文件
if(empty($Img)){
//如果是生成缩略图的时候出错,则需要删掉已经复制的文件
if($Type!=1){
unlink($Image);
}
return false;
}
//如果是执行调整尺寸操作则
$w=imagesx($Img);
$h=imagesy($Img);
$width = $w;
$height = $h;
if($Type==1){
if($width>$Dw){
$Par=$Dw/$width;
$width=$Dw;
$height=$height*$Par;
if($height>$Dh){
$Par=$Dh/$height;
$height=$Dh;
$width=$width*$Par;
}
}elseif($height>$Dh){
$Par=$Dh/$height;
$height=$Dh;
$width=$width*$Par;
}else{
$width=$width;
$height=$height;
}
if($ImgInfo[2] == 3)
{
imagesavealpha($Img,true);
}
$nImg = imagecreatetruecolor($width,$height); //新建一个真彩色画布
if($ImgInfo[2] == 3)
{
imagealphablending($nImg,false);
imagesavealpha($nImg,true);
}
imagecopyresampled($nImg,$Img,0,0,0,0,$width,$height,$w,$h);//重采样拷贝部分图像并调整大小
//如果是执行生成缩略图操作则
}else{
$nImg = imagecreatetruecolor($Dw,$Dh);
if($h/$w>$Dh/$Dw){ //高比较大
$height=$h*$Dw/$w;
$IntNH=$height-$Dh;
imagecopyresampled($nImg, $Img, 0, -$IntNH/1.8, 0, 0, $Dw, $height, $w, $h);
}else{ //宽比较大
$width=$w*$Dh/$h;
$IntNW=$width-$Dw;
imagecopyresampled($nImg, $Img, -$IntNW/1.8, 0, 0, 0, $width, $Dh, $w, $h);
}
}
if(!empty($exif))
{
switch ($exif) {
case 8:
$image = imagerotate($nImg, 90, 0);
break;
case 3:
$image = imagerotate($nImg, 180, 0);
break;
case 6:
$image = imagerotate($nImg, -90, 0);
break;
}
}
switch($ImgInfo[2]){
case 1:
imagegif($nImg,$Image);
Break;
case 2:
imagejpeg($nImg,$Image);
Break;
case 3:
imagepng($nImg,$Image);
Break;
}
$fileDirArr = explode('/',$Image);
return end($fileDirArr);
}
【php】png 图片压缩 透明底色变黑的更多相关文章
- Android-加载透明PNG图片变黑的问题
png和jpg作为两种最常用的图片格式,首先我们要知道他们的区别: 1.从一般图片的外观上来说,他们是无法直接判断的 2.从文件大小上来说,同样一张图png肯定比jpg的大 3.通过查资料咱们可以发现 ...
- [转]png图片压缩大小但是不改变透明部分
降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...
- NGUI 实现 透明底图遮罩 && 人物像素变黑
今天 UI 那边要求实现一个 透明底图遮罩 与 变黑 的效果. 刚开始考虑使用 shader 实现一个 网上搜了一下,发现了这个,但是底图需要不透明才行,不然他会把 底图的不遮罩部分的透明部分 进行颜 ...
- Atitit 图像处理底色变红的解决
Atitit 图像处理底色变红的解决 1.1. 原因 ImageIO bug ,alpha通道应该在保存jpg的时候排除1 1.2. 解决,自己移除alpha通道即可1 2. Image sav ...
- iOS图片压缩处理
理解概念 首先,我们必须明确图片的压缩其实是两个概念: “压” 是指文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降. “缩” 是指文件的尺寸变小,也就是像素数减少,而长宽尺寸变小,文件体 ...
- 性能优化——Android图片压缩与优化的几种方式
图片优化压缩方式大概可以分为以下几类:更换图片格式,质量压缩,采样率压缩,缩放压缩,调用jpeg压缩等1.设置图片格式Android目前常用的图片格式有png,jpeg和webp,png:无损压缩图片 ...
- H5图片压缩上传
1.所用到技术 HTML5 API:filereader.canvas 以及 formdata 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的实现.本次使用到的FileRea ...
- 降低PNG图片存储大小方法、图片压缩方法
降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...
- HTML5 CANVAS 实现图片压缩和裁切
原文地址:http://leonshi.com/2015/10/31/html5-canvas-image-compress-crop/?utm_source=tuicool&utm_medi ...
随机推荐
- Java | 基础归纳 | Map.Entry<String, String>
public class Test { private static Map<String,String> student; private static void init() { st ...
- PostgreSQL-14-异常值处理
-- 查看异常值CREATE TABLE outerdata(id int PRIMARY KEY,value numeric); \COPY outerdata FROM 'C:\Users\iHJ ...
- Tinghua Data Mining 7
SVM B分割得更加无偏 比较公平 卡着分界面的点叫支持向量,就好比托着分界面 支持向量决定了可移动的范围,这个范围就叫margin 分界面可移动的距离 前提是先要被分对 对偶问题一般是不等价的,但是 ...
- 如何解决netty发送消息截断问题
在netty开发过程中我遇到过长的消息被分割成多个小消息的问题.如下图所示: 其实这两条消息应该是一条消息,它们两个才是一个完整的json字符串.查看代码原来是客户端与服务器端都没有考虑TCP粘包 ...
- 洛谷1280(dp)
题目性质:1.当前节点空闲则必须做任务,而不是可选可不选:2.然而前面的如果能覆盖当前节点,就可以不选. 解决方法:倒着扫可以很好地解决这两个问题.dp[i]为时刻i可得的最大空闲时间.如果此刻没有任 ...
- jquery.validate自定义验证--成功提示与择要提示
1. 自定义验证--成功提示 1) 添加选项 errorClass: "unchecked", validClass: "checked", errorElem ...
- 记住,永远不要在MySQL中使用“utf8”-转
http://www.infoq.com/cn/articles/in-mysql-never-use-utf8-use-utf8 最近我遇到了一个bug,我试着通过Rails在以“utf8”编码的M ...
- Spring框架学习-Spring的AOP概念详解
一.SpringAOP的概述. AOP(Aspect Oriented Programming),面向切面编程,通过预编译方式和运行期间动态代理实现程序的功能的统一维护的技术.AOP是OOP(面向对象 ...
- cf580E. Kefa and Watch(线段树维护字符串hash)
题意 $n$个数的序列,$m + k$种操作 1.$l , r, k$把$l - r$赋值为$k$ 2.$l, r, d$询问$l - r$是否有长度为$d$的循环节 Sol 首先有个神仙结论:若询问 ...
- main函数与命令行参数
main函数的概念 C语言中main函数称之为主函数 一个c程序从main函数开始执行的 下面的main函数定义正确吗? main函数的本质 main函数是操作系统调用的函数 操作系统总是将main函 ...