PHP图片压缩到指定的大小
<?php
/**
* 分享请保持网址。尊重别人劳动成果。谢谢。
* 图片压缩类:通过缩放来压缩。如果要保持源图比例,把参数$percent保持为1即可。
* 即使原比例压缩,也可大幅度缩小。数码相机4M图片。也可以缩为700KB左右。如果缩小比例,则体积会更小。
* 结果:可保存、可直接显示。
*/
class imgcompress
{
private $src;
private $image;
private $imageinfo;
private $percent = 0.5;
/**
* 图片压缩
*
* @param $src 源图
* @param float $percent
* 压缩比例
*/
public function __construct($src, $percent = 1)
{
$this->src = $src;
$this->percent = $percent;
}
/**
* 高清压缩图片
*
* @param string $saveName
* 提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
* @param int $maxFileSize
* 目标文件大小
*/
public function compressImg($saveName = '')
{
$this->_openImage();
if (! empty($saveName))
$this->_saveImage($saveName); // 保存
else
$this->_showImage();
return true;
}
/**
* 内部:打开图片
*/
private function _openImage()
{
list ($width, $height, $type, $attr) = getimagesize($this->src);
$this->imageinfo = array(
'width' => $width,
'height' => $height,
'type' => image_type_to_extension($type, false),
'attr' => $attr
);
$fun = "imagecreatefrom" . $this->imageinfo['type'];
$this->image = $fun($this->src);
$this->_thumpImage();
}
/**
* 内部:操作图片
*/
private function _thumpImage()
{
// $this->percent = $this->imageinfo['width'] ;
$new_width = $this->imageinfo['width'] * $this->percent;
$new_height = $this->imageinfo['height'] * $this->percent;
// $new_width = 1200;
// $new_height = 900;
$image_thump = imagecreatetruecolor($new_width, $new_height);
// 将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度
imagecopyresampled($image_thump, $this->image, 0, 0, 0, 0, $new_width, $new_height, $this->imageinfo['width'], $this->imageinfo['height']);
imagedestroy($this->image);
$this->image = $image_thump;
// $this->image = imagerotate($this->image, 270, 0);
}
/**
* 输出图片:保存图片则用saveImage()
*/
private function _showImage()
{
header('Content-Type: image/' . $this->imageinfo['type']);
$funcs = "image" . $this->imageinfo['type'];
$funcs($this->image);
}
/**
* 保存图片到硬盘:
*
* @param string $dstImgName
* 1、可指定字符串不带后缀的名称,使用源图扩展名 。2、直接指定目标图片名带扩展名。
*/
private function _saveImage($dstImgName)
{
if (empty($dstImgName))
return false;
$allowImgs = [
'.jpg',
'.jpeg',
'.png',
'.bmp',
'.wbmp',
'.gif'
]; // 如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
$dstExt = strrchr($dstImgName, ".");
$sourseExt = strrchr($this->src, ".");
if (! empty($dstExt))
$dstExt = strtolower($dstExt);
if (! empty($sourseExt))
$sourseExt = strtolower($sourseExt);
// 有指定目标名扩展名
if (! empty($dstExt) && in_array($dstExt, $allowImgs)) {
$dstName = $dstImgName;
} elseif (! empty($sourseExt) && in_array($sourseExt, $allowImgs)) {
$dstName = $dstImgName . $sourseExt;
} else {
$dstName = $dstImgName . $this->imageinfo['type'];
}
$funcs = "image" . $this->imageinfo['type'];
$funcs($this->image, $dstName);
}
/**
* 销毁图片
*/
public function __destruct()
{
if(!empty($this->image)){
imagedestroy($this->image);
}
}
/**
* 压缩图片到指定大小内
* @param string $to_source
* 压缩后保存的路径
* @param number $maxFileSize
* 要压缩的大小
* @return boolean
*/
public function getimg($to_source, $maxFileSize = 200)
{
$source_size = filesize($this->src) / 1024;
if ($source_size < $maxFileSize) {
copy($this->src, $to_source);
return true;
} else {
$ys = true;
$i = 0;
while ($ys) {
clearstatcache();
$this->percent = 0.7;
// $percent = 0.7;
if ($i > 0) {
$this->src = $to_source;
}
$image = $this->compressImg($to_source);
$to_source_size = filesize($to_source) / 1024;
// var_dump($to_source_size);
$ys = $to_source_size > $maxFileSize;
$i ++;
}
// echo "压缩次数:" . $i;
}
return true;
}
}
PHP图片压缩到指定的大小相关推荐
- 图片不超过200kb怎么调整?一分钟学会图片压缩到指定大小
很多网站为了保证页面的流畅度会限制图片上传的kb大小,所以我们需要把图片压缩到指定大小(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图),那么有没有比较快捷的方法可以自定义压缩图片大小呢?今天 ...
- 图片如何缩小到100k?怎么把图片压缩到指定大小?
有时候在平台上传图片会规定大小100k,图片如何缩小到100k呢?可以使用压缩图的图片压缩到指定大小功能,十分的方便一键操作就可以将图片压缩到100k以内,来看看具体操作步骤吧. 1.打开压缩图点击图 ...
- 如何将图片压缩到指定大小?压缩图片大小的方法
很多报名平台都对图片大小有固定的数值要求,所以不少小伙伴来问,怎么压缩图片200k以下(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)?想要把图片压缩指定大小就要用到一些比较专业的工具,今天 ...
- 怎么把图片压缩到30k以内?如何图片压缩到指定大小?
在公务员考试报名时,需要提交个人证件照片,通常都会要求照片大小不能超过30kb,否则会导致上传失败.那么怎么把图片压缩到30k以内呢?想要把图片压缩到30kb就需要用到压缩图的图片压缩指定大小(图片压 ...
- 图片怎么压缩到200k以内?图片压缩怎么指定大小?
在某些情况下,我们需要将图片压缩到指定(https://www.yasuotu.com/imagesize)的大小,例如200k以内,在本文中,我们将用一个特别简单的方法来将图片压缩到200k以内的 ...
- JS将base64图片压缩至指定大小
base64图片压缩至指定大小 在开发中,通常在上传图片时,由于各种限制,需要将上传的图片压缩到某一大小范围内才能上传.在此提供以下方法实现该需求,复制可用. /*** 压缩图片到指定大小* @par ...
- java 图片旋转_Java实现图片旋转、指定图像大小和水平翻转|chu
本文实例为大家分享了Java实现图片旋转.指定图像大小.水平翻转,供大家参考,具体内容如下 package com.zeph.j2se.image; import java.awt.Graphics2 ...
- 图片大小如何调整到10k?图片压缩到指定大小怎么弄?
在现代社交网络和在线平台上,上传的图片大小都会有限制,过大的图像会导致性能问题.加载时间延长和带宽消耗,所以图片压缩指定大小(https://www.yasuotu.com/imagesize)就成了 ...
- iOS图片压缩成指定大小
在iOS中涉及一些图片显示和处理问题,在实际中碰到过修改账户头像时上传头像出现 error = Error Domain=com.alamofire.error.serialization.respo ...
最新文章
- 关于云计算 你所知道的可能不是真的
- python---简单的接口测试实例
- git提交输入密码_git提交到自己的服务器,每次都要输入密码
- boost::stl_interfaces::iterator_interface相关的测试程序
- 兔八哥与猎人(洛谷P1170题题解,Java语言描述)
- 怎么监听Android软键盘的打开和关闭
- 2017广州大学计算机组成原理,广州大学松田学院计算机组成原理复习题(仅供参考).doc...
- Android APK文件反编译 查看appid等信息
- JAVA面试题《下》
- C++---暂时的休憩
- python爬微信公众号视频_python爬虫公众号所有信息,并批量下载公众号视频
- 别人花了几万元学的英语,我帮你们免费弄来了
- css之-单行文本溢出显示省略号,多行文本溢出显示省略号
- ICM20602六轴传感器-IIC通信模式
- 计算机硬件intel的商标,电脑硬件配置品牌详细介绍推荐
- hub_thread
- 《动手学深度学习》笔记——深度学习简介
- 调试经验——使用Excel绘制二维向量值函数的曲线(等速螺线r(t)=(tcost)i+(tsint)j)
- vue生命周期函数、react生命周期函数、微信小程序生命周期函数、uni-app生命周期函数,简介及图示
- GIS原理学习——栅格数据的局域分析、领域分析及分区运算
热门文章
- 爷青回!最近很火的朋友圈怀旧小电视源码来啦!看到最后一个视频我大呼好家伙!
- oracle asm密码是什么,ASM有自己的参数、密码、alert、监听文件
- 记录四川移动盒子打开adb命令的方法 型号:UNT402H
- 知识共享协议与版权声明
- 数字孪生使用云流化的优势
- 大唐杯学习笔记(1)—— 5G网络架构与组网部署
- 微软的语音交互“滑铁卢”:Cortana小娜悲惨收场,未来路在何方?
- cox(Quaro)对设计的崭新定义,改变我的人生
- Rootkit技术基础(4)
- md500代码,异步电机,基于28379D,带无速度传感器控制,参数辨识,同步调制等功能