/**
* 函数:调整图片尺寸或生成缩略图 v 1.1
* @param $Image 需要调整的图片(含路径)
* @param $Dw 调整时最大宽度;缩略图时的绝对宽度
* @param $Dh 调整时最大高度;缩略图时的绝对高度
* @param $Type 1,调整尺寸; 2,生成缩略图
* @return bool
*/
public function compressImg($image, $Dw, $Dh, $type)
{
if (!file_exists($image)) {
return false;
} // 如果需要生成缩略图,则将原图拷贝一下重新给$Image赋值(生成缩略图操作)
// 当Type==1的时候,将不拷贝原图像文件,而是在原来的图像文件上重新生成缩小后的图像(调整尺寸操作)
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;
}
// 如果是执行调整尺寸操作则
if ($type == 1) {
$w = imagesx($Img);
$h = imagesy($Img); $width = $w;
$height = $h; 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;
if ($width > $Dw) {
$Par = $Dw / $width;
$width = $Dw;
$height = $height * $Par;
}
} else {
$width = $Dw;
$height = $Dh;
}
$nImg = imagecreatetruecolor($Dw, $Dh); // 新建一个真彩色画布
$white = imagecolorallocate($nImg, 255, 255, 255);
// 填充白底色
imagefill($nImg, 0, 0, $white);
if ($h / $w > $Dh / $Dw) { // 高比较大
$width = $w * ($Dh / $h);
$IntNW = $Dw - $width;
$Dx = $IntNW / 2;
$Dy = 0;
} else { // 宽比较大
$height = $h * ($Dw / $w);
$IntNH = $Dh - $height;
$Dx = 0;
$Dy = $IntNH / 2;
}
imagecopyresampled($nImg, $Img, $Dx, $Dy, 0, 0, $width, $height, $w, $h); // 重采样拷贝部分图像并调整大小
imagejpeg($nImg, $image); // 以JPEG格式将图像输出到浏览器或文件
return true;
} else { // 如果是执行生成缩略图操作则
$w = imagesx($Img);
$h = imagesy($Img);
$nImg = imagecreatetruecolor($Dw, $Dh);
$white = imagecolorallocate($nImg, 255, 255, 255);
// 填充白底色
imagefill($nImg, 0, 0, $white);
if ($h / $w > $Dh / $Dw) { // 高比较大
$width = $w * ($Dh / $h);
$IntNW = $Dw - $width;
imagecopyresampled($nImg, $Img, $IntNW / 2, 0, 0, 0, $width, $Dh, $w, $h);
} else { // 宽比较大
$height = $h * ($Dw / $w);
$IntNH = $Dh - $height;
imagecopyresampled($nImg, $Img, 0, $IntNH / 2, 0, 0, $Dw, $height, $w, $h);
}
imagejpeg($nImg, $image);
return true;
}
}

java上传图片时压缩图片的更多相关文章

  1. java 上传图片 并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  2. java 上传图片 并压缩图片大小(转)

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  3. java上传图片并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  4. 上传图片时压缩图片 - 前端(canvas)做法

    HTML前端代码: <?php $this->layout('head'); ?> <?php $this->layout('sidebar'); ?> <m ...

  5. java实现上传图片并压缩图片大小功能

    缩略图压缩文件jar包 <!-- 图片缩略图 --> <dependency> <groupId>net.coobird</groupId> <a ...

  6. Java使用 Thumbnails 压缩图片

    业务:用户上传一张图片到文件站,需要返回原图url和缩略图url 处理思路: 因为上传图片方法返回url是单个上传,第一步先上传原图并返回url 处理缩略图并上传:拿到MultipartFile压缩成 ...

  7. vue + vant 上传图片之压缩图片

    <van-uploader v-model="fileList" multiple :after-read="afterRead" :max-count= ...

  8. vue+element-ui上传图片时压缩大小

    第一种方法:需要安装一个模块 yarn add image-conversion --save <el-upload ref="upload" :data="dat ...

  9. java上传图片,把图片存到本地

    思路:js通过FileReader获取图片的Base64,Java解码用IO存到本地. HTML 代码 <input type="file" ng-model="f ...

随机推荐

  1. maven的三种项目打包方式----jar,war,pom

    1.pom工程:**用在父级工程或聚合工程中.用来做jar包的版本控制.必须指明这个聚合工程的打包方式为pom 2.war工程:将会打包成war,发布在服务器上的工程.如网站或服务.在SpringBo ...

  2. linux下使用openssl生成 csr crt CA证书

    证书文件生成:一.服务器端1.生成服务器端    私钥(key文件);openssl genrsa -des3 -out server.key 1024运行时会提示输入密码,此密码用于加密key文件( ...

  3. java命令-(学习)jstack 工具

    一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...

  4. JAVA boolean 类型

    boolean 类型用来存储布尔值,在java中布尔值只有2个,true和false. boolean flag=true; flag=false;

  5. 你还不懂java的日志系统吗

    一.背景 在java的开发中,使用最多也绕不过去的一个话题就是日志,在程序中除了业务代码外,使用最多的就是打印日志.经常听到的这样一句话就是"打个日志调试下",没错在日常的开发.调 ...

  6. pytest(7)-yield与终结函数

    通过上一篇文章,我们已经知道了pytest中,可以使用Fixture来完成运行测试用例之前的一些操作如连接数据库,以及测试执行之后自动去做一些善后工作如清空脏数据.关闭数据库连接等. 我们已经学会了f ...

  7. Python内置模块(re+collections+time等模块)

    Python内置模块(re+collections+time等模块) 1. re模块 import re 在python要想使用正则必须借助于模块 re就是其中之一 1.1 findall功能( re ...

  8. v77.01 鸿蒙内核源码分析(消息封装篇) | 剖析LiteIpc(上)进程通讯内容 | 新的一年祝大家生龙活虎 虎虎生威

    百篇博客分析|本篇为:(消息封装篇) | 剖析LiteIpc进程通讯内容 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁 ...

  9. 深入MySQL(四):MySQL的SQL查询语句性能优化概述

    关于SQL查询语句的优化,有一些一般的优化步骤,本节就介绍一下通用的优化步骤. 一条查询语句是如何执行的 首先,我们如果要明白一条查询语句所运行的过程,这样我们才能针对过程去进行优化. 参考我之前画的 ...

  10. 阿里云K8S节点NotReady状态

    开发部署pod的时候在wayne平台上部署不上去,删除也删除不了 先删除 kubectl delete pod pod-name --grace-period=0 --force 删除之后然后部署新的 ...