java上传图片时压缩图片
/**
* 函数:调整图片尺寸或生成缩略图 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上传图片时压缩图片的更多相关文章
- java 上传图片 并压缩图片大小
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- java 上传图片 并压缩图片大小(转)
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- java上传图片并压缩图片大小
Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...
- 上传图片时压缩图片 - 前端(canvas)做法
HTML前端代码: <?php $this->layout('head'); ?> <?php $this->layout('sidebar'); ?> <m ...
- java实现上传图片并压缩图片大小功能
缩略图压缩文件jar包 <!-- 图片缩略图 --> <dependency> <groupId>net.coobird</groupId> <a ...
- Java使用 Thumbnails 压缩图片
业务:用户上传一张图片到文件站,需要返回原图url和缩略图url 处理思路: 因为上传图片方法返回url是单个上传,第一步先上传原图并返回url 处理缩略图并上传:拿到MultipartFile压缩成 ...
- vue + vant 上传图片之压缩图片
<van-uploader v-model="fileList" multiple :after-read="afterRead" :max-count= ...
- vue+element-ui上传图片时压缩大小
第一种方法:需要安装一个模块 yarn add image-conversion --save <el-upload ref="upload" :data="dat ...
- java上传图片,把图片存到本地
思路:js通过FileReader获取图片的Base64,Java解码用IO存到本地. HTML 代码 <input type="file" ng-model="f ...
随机推荐
- 【XR-2】伤痕
不难发现,直接漫无目的地构造不是一个好的选择,因为我们并不知道选择四座城市方案的上界是什么,因此下面可以来先分析一下这个方案的上界. 首先可以考虑这使得这四个点的导出子图是强连通的方案数,但是经过尝试 ...
- Mysql Json函数之搜索 (三)
本节中的函数对JSON值执行搜索操作,以从其中提取数据,报告数据是否在其中的某个位置或报告其中的数据的路径. JSON_CONTAINS(target, candidate[, path]) 通过返回 ...
- ajax、axios、fetch区别及优缺点
将jQuery的ajax.axios和fetch做个简单的比较,所谓仁者见仁智者见智,最终使用哪个还是自行斟酌 1.jQuery ajax $.ajax({ type: 'POST', url: ur ...
- #import和#include区别
#import与#include的类似,都是把其后面的文件拷贝到该指令所在的地方 #import可以自动防止重复导入 #import <> 用于包含系统文件 #import"&q ...
- 编译安装http2.4
编译安装http2.4 1.安装相关依赖包 [root@centos7 ~]yum -y install gcc make 2.下载http2.4包,并解压 [root@centos7 ~]#tar ...
- 帆软报表(finereport)table块钻取,返回记住table块位置
<1>首先table块加初始化事件,idex为参数,参数值为$tab_idexsetTimeout(function(){_g().getWidgetByName("tabpan ...
- Rock Pi开发笔记(二):入手Rock Pi 4B plus(基于瑞星微RK3399)板子并制作系统运行
前言 入手rock pi 4b plus板子,查看具体的实物,然后制作系统,刷系统,让摇滚派的ubuntu系统运行起来. Rock Pi 4B plus 介绍 ROCK Pi 4 是 Ra ...
- 基于GDAL库,读取.grd文件(以海洋地形数据为例)Java版
技术背景 海洋地形数据主要是通过美国全球地形起伏数据(GMT)获得,数据格式为grd(GSBG)二进制数据,打开软件通过是Surfer软件,surfer软件可进行数据的编辑处理,以及进一步的可视化表达 ...
- Solution -「ARC 104D」Multiset Mean
\(\mathcal{Description}\) Link. 读题时间≈想题时间,草.( 给定 \(N,K,M\),对于每个 \(x\in[1,N]\) 的整数 \(x\),统计多重集 ...
- suse 12 二进制部署 Kubernetets 1.19.7 - 第08章 - 部署kube-scheduler组件
文章目录 1.8.部署kube-scheduler 1.8.0.创建kube-scheduler请求证书 1.8.1.生成kube-scheduler证书和私钥 1.8.2.创建kube-schedu ...