需要使用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 图片压缩 透明底色变黑的更多相关文章

  1. Android-加载透明PNG图片变黑的问题

    png和jpg作为两种最常用的图片格式,首先我们要知道他们的区别: 1.从一般图片的外观上来说,他们是无法直接判断的 2.从文件大小上来说,同样一张图png肯定比jpg的大 3.通过查资料咱们可以发现 ...

  2. [转]png图片压缩大小但是不改变透明部分

    降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...

  3. NGUI 实现 透明底图遮罩 && 人物像素变黑

    今天 UI 那边要求实现一个 透明底图遮罩 与 变黑 的效果. 刚开始考虑使用 shader 实现一个 网上搜了一下,发现了这个,但是底图需要不透明才行,不然他会把 底图的不遮罩部分的透明部分 进行颜 ...

  4. Atitit  图像处理底色变红的解决

    Atitit  图像处理底色变红的解决 1.1. 原因  ImageIO  bug ,alpha通道应该在保存jpg的时候排除1 1.2. 解决,自己移除alpha通道即可1 2. Image sav ...

  5. iOS图片压缩处理

    理解概念 首先,我们必须明确图片的压缩其实是两个概念: “压” 是指文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降. “缩” 是指文件的尺寸变小,也就是像素数减少,而长宽尺寸变小,文件体 ...

  6. 性能优化——Android图片压缩与优化的几种方式

    图片优化压缩方式大概可以分为以下几类:更换图片格式,质量压缩,采样率压缩,缩放压缩,调用jpeg压缩等1.设置图片格式Android目前常用的图片格式有png,jpeg和webp,png:无损压缩图片 ...

  7. H5图片压缩上传

    1.所用到技术 HTML5 API:filereader.canvas 以及 formdata 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的实现.本次使用到的FileRea ...

  8. 降低PNG图片存储大小方法、图片压缩方法

    降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...

  9. HTML5 CANVAS 实现图片压缩和裁切

    原文地址:http://leonshi.com/2015/10/31/html5-canvas-image-compress-crop/?utm_source=tuicool&utm_medi ...

随机推荐

  1. Maven聚合工程怎么变回普通的Maven工程

    问题 Maven聚合工程的父工程的packaging是pom,如果我们将其改为jar,会立刻报错: Project build error: 'packaging' with value 'jar' ...

  2. 用css固定textarea文本域大小尺寸

    textarea元素在chrome等浏览器下可以被拖拉从而改变大小,对于查看textarea里面的内容来说相当方便,但是有时候 我们为了保持网页的美观,不得不想要禁掉这个功能,禁止用户随意拉动text ...

  3. 证书重复冲突问题:Command /usr/bin/codesign failed with exit code 1

    打开钥匙串 查看是否有两个identifier为相同 的证书,显然导证书的时候不知道怎么把证书导进了系统帐号,并且还重复了.把重复的证书删除就行了.

  4. 关于Mybatis的一点小记录(parameterType)

    1.Mybatis的parameterType有两个比较常用的,一个是类的对象,还有一个就是Map,然后取值的方法也很简单: 基本数据类型:#{参数} 获取参数中的值 复杂数据类型:#{属性名} ,m ...

  5. ZOJ Course Selection System DP

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5565 Course Selection System Time ...

  6. Asp.Net实现记录历史访问人数和当前在线人数

    ************************************在Global.asax中如下************************ <%@ Import Namespace= ...

  7. JAVA吃货联盟项目。

    1基础通过数组.选择结构.循环等实 现吃货联盟订餐系统. 1.我要订餐: 2.查看餐袋: 3.签收订单: 4.删除订单: 5.我要点赞: 6.退出系统: public class Doy001 { p ...

  8. mint-ui pull down不起作用及解决方案

    <template> <div style="min-height:200px"> <mt-loadmore :top-method="lo ...

  9. Java-String字符串相关

    字符串String: 封装char[] 字符数组,不可变(因为在底层代码中,值用final关键字修饰) 字符串的字面值: 如果第一次用到一个字符串字面值,会在内存中"字符串常量池" ...

  10. 使用JDBC进行简单的增删改查

    JDBC为java的基础.用jdbc实现对数据库的增删改查的功能是程序员的基本要求.本例以mysql为例,首先要使用本例需要添加mysql-connector-java-5.1.7-bin.jar包. ...