php图片批量压缩并同时保持清晰度

这篇具有很好参考价值的文章主要介绍了php图片批量压缩并同时保持清晰度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

php图片压缩可以通过GD库来实现。以下是一个使用GD库进行图片压缩的示例代码:文章来源地址https://www.toymoban.com/news/detail-671690.html

// 原始图片路径
$sourceImage = 'path/to/source/image.jpg'; 
// 压缩后保存的路径及文件名
$compressedImage = 'path/to/compressed/image.jpg'; 
// 压缩后的图片质量(1-100,100为最高质量)
$compressionQuality = 80; 
// 获取原始图片的信息
$imageInfo = getimagesize($sourceImage);
$originalWidth = $imageInfo[0];
$originalHeight = $imageInfo[1]; 
// 创建一个空白画布
$compressed = imagecreatetruecolor($originalWidth, $originalHeight); 
// 根据原始图片的格式创建一个新的图片资源
if ($imageInfo['mime'] == 'image/jpeg' || $imageInfo['mime'] == 'image/pjpeg') {
    $source = imagecreatefromjpeg($sourceImage);
} elseif ($imageInfo['mime'] == 'image/png' || $imageInfo['mime'] == 'image/x-png') {
    $source = imagecreatefrompng($sourceImage);
}
 
// 将原始图片复制到新的画布上并进行压缩
imagecopyresampled($compressed, $source, 0, 0, 0, 0, $originalWidth, $originalHeight, $originalWidth, $originalHeight);
 
// 保存压缩后的图片
imagejpeg($compressed, $compressedImage, $compressionQuality); 
// 释放内存
imagedestroy($compressed);
imagedestroy($source); 
echo '图片压缩完成!';

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  提供图片名(可不带扩展名,用源图扩展名)用于保存。或不提供文件名直接显示
     */
    public function compressImg($saveName='')
    {
        $this->_openImage();
        if(!empty($saveName)) $this->_saveImage($saveName);  //保存
        else $this->_showImage();
    }
    /**
     * 内部:打开图片
     */
    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()
    {
        $new_width = $this->imageinfo['width'] * $this->percent;
        $new_height = $this->imageinfo['height'] * $this->percent;
        $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;
    }
    /**
     * 输出图片:保存图片则用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(){
        imagedestroy($this->image);
    }
}
$source =  '123.png';//原图片名称
$dst_img = 'text.png';//压缩后图片的名称
$percent = 1;  #原图压缩,不缩放,但体积大大降低
$image = (new imgcompress($source,$percent))->compressImg($dst_img);

批量压缩


/**
 * 扫描文件夹
 * @param $path_dir
 */
function scan_dir($path_dir){
    if (!is_dir($path_dir)) return false;
    $rs = scandir($path_dir);
    foreach ($rs as $k => $v){
        if ($v === '.' || $v === '..') continue;
        $path = $path_dir.rtrim($v,'/');
        if (is_file($path)){
            $image = (new imgcompress($path, 1))->compressImg($path);
            log_msg("{$path}---");
            continue;
        }
        if (is_dir($path."/")) scan_dir($path."/");
    }
}
function log_msg($msg){
    echo "$msg\r\n";
}
/*开始扫描文件夹*/
$source_dir = "./testimages/";//目标路径
scan_dir($source_dir);

到了这里,关于php图片批量压缩并同时保持清晰度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WebRTC清晰度和流畅度

    WebRTC清晰度和流畅度 flyfish WebRTC提供了4种模式DISABLED,MAINTAIN_FRAMERATE,MAINTAIN_RESOLUTION,BALANCED 接口是 根据源码 接口这里不是一一对应的kDetailed和kText是类似的 使用方法 上述代码video_track创建好之后,调用 参考 https://w3c.github.io/webrtc-pc/#idl-def-rtcdegradationpreference https://crbug.co

    2024年02月10日
    浏览(52)
  • 解决Canvas画图清晰度问题

    最近在开发Web端远程桌面的时候遇到的一个问题,解决记录一下,分享给各位有需要用到的朋友。 先吹下水:远程桌面的连接我们是通过Websocket连接后,后端不断返回远程端的界面二进制数据流,我接收到之后转为图像,画到Canvas中,然后对canvas进行一系列的事件监听,传递

    2024年01月21日
    浏览(41)
  • Halcon清晰度检测Demo

    此实例通过使用Halcon实现5种清晰度算法函数: 1. 方差算法函数; 2. 拉普拉斯能量函数; 3. 能量梯度函数; 4. Brenner函数; 5. Tenegrad函数; 测试效果如下图片;找到峰值对应的那张图,确实是最清晰的那张;使用直方图显示清晰度结果,如果有更好的方法,那就跟帖回复吧。

    2023年04月25日
    浏览(38)
  • Python之Matplotlib绘图调节清晰度

    引言 使用python中的matplotlib.pyplot绘图的时候,如果将图片显示出来,或者另存为图片,常常会出现清晰度不够的问题,当然这种问题是对于png或者jpg这种格式的图片而言的,如果是生成svg或者pdf则不存在这种问题,但是png和jpg也是经常需要使用的图片格式,因此就需要想办法

    2024年02月01日
    浏览(44)
  • 镜头光学指标介绍----清晰度SFR/MTF

    目录 简介         常用单位 lp/mm(line-pairs/mm) Cycle / pixel LW/PH(line widths/ picture height) 转换关系 MTF MTF概念 MTF50,MTF50P SFR SFR的计算方法 参考资料: 在镜头选型或者对比中,一般都会参考一些镜头的光学指标,产品中也会根据产品需求,选取合适的镜头,一般有清晰度指标

    2024年02月09日
    浏览(42)
  • Python 图像处理教程:如何提高图像细节清晰度

    Python 是一种广泛应用于图像处理的编程语言,它提供了丰富的图像处理库,例如 Pillow 和 OpenCV 等。在进行图像处理时,有时候我们需要提高图像的细节清晰度,以便更好地观察和分析图像。本教程将介绍一些 Python 图像处理技巧,帮助您提高图像细节的清晰度。 增强图像对

    2024年02月11日
    浏览(40)
  • 亿图导出word和PDF中清晰度保留方法

    在亿图软件中画一个元件大小搭配合理的图。注意字体大小的安排,尤其是角标的大小要合适,示范如下 选中所有元器件,右键使用组合功能将电路图组合为一个整体 将亿图软件中的图保存为SVG格式。示范如下 在导出到office中选择SVG文档 在visio中打开上一步保存的SVG文件。

    2024年02月08日
    浏览(61)
  • videojs 实现自定义组件(视频画质/清晰度切换) React

    最近使用videojs作为视频处理第三方库,用来对接m3u8视频类型。这里总结一下自定义组件遇到的问题及实现,目前看了许多文章也不全,官方文档写的也不是很详细,自己摸索了一段时间陆陆续续完成了,这是实现后的效果. 样式啥的自己检查后覆盖就行了,没啥说的,重点看

    2024年02月11日
    浏览(68)
  • paperclub今日分享:一键体验Stable Diffusion 和清晰度修复

    今天分享一下SD和清晰度修复,并在文末附带源代码。 1. Stable Diffusion Stable Diffusion简称SD,是一个文本到图像的潜在扩散模型,说到SD就得提下Diffusion,简单来讲主要利用CLIP语言向量结合UNET的注意力机制生成noise predictor(噪声预测器),然后反推得到结果,这个过程非常耗时

    2024年02月12日
    浏览(56)
  • js将Excel转成PDF(纸张、分页、铺满、提高清晰度)

    依赖: 示例html DOM: 核心js: - - -

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包