$newImage = imagecreatetruecolor($newWidth, $newHeight);
$source = imagecreatefrompng($imagePath);
imagecopyresampled($newImage, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
imagepng($newImage, $imagePath, 6);
php7 GD库,有的图片,为啥压缩后变大了 原图100k变300k,300k变700k
完整源码
namespace app\common\model;
use think\Model;
class Attachment extends Model
{
}
$attachment = new Attachment();
$attachment->data(array_filter($params));
$attachment->save();
\think\Hook::listen("upload_after", $attachment);
$this->miniImg($attachment);
public function miniImg($attachment, $maxWidth = 800, $maxHeight = 600, $aspectRatioThreshold = 2) {
if (!stristr($attachment->mimetype, 'image')) {
return;
}
$imagePath = ltrim($attachment->url, '/');
if (!file_exists($imagePath)) {
return;
}
$fileSize = filesize($imagePath);
if ($fileSize < 300 * 1024) {
return; // 如果文件小于300KB,则不处理
}
list($width, $height, $type) = getimagesize($imagePath);
$newWidth = $width;![]
$newHeight = $height;
// 如果宽度或高度超过最大值,则进行特殊处理
if ($width > $maxWidth || $height > $maxHeight) {
$ratio = max($width / $maxWidth, $height / $maxHeight);
$newWidth = ceil($width / $ratio);
$newHeight = ceil($height / $ratio);
if ($width / $height > $aspectRatioThreshold) {
$newHeight = ceil($newWidth / $aspectRatioThreshold);
} elseif ($height / $width > $aspectRatioThreshold) {
$newWidth = ceil($newHeight * $aspectRatioThreshold);
}
}
$newImage = imagecreatetruecolor($newWidth, $newHeight);
switch ($type) {
case IMAGETYPE_JPEG:
$source = imagecreatefromjpeg($imagePath);
break;
case IMAGETYPE_PNG:
$source = imagecreatefrompng($imagePath);
break;
case IMAGETYPE_GIF:
$source = imagecreatefromgif($imagePath);
break;
case IMAGETYPE_WEBP:
$source = imagecreatefromwebp($imagePath);
break;
default:
return; // 不支持的图片类型
}
imagecopyresampled($newImage, $source, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
switch ($type) {
case IMAGETYPE_JPEG:
imagejpeg($newImage, $imagePath, 60);
break;
case IMAGETYPE_PNG:
imagepng($newImage, $imagePath, 6);
break;
case IMAGETYPE_GIF:
imagegif($newImage, $imagePath);
break;
case IMAGETYPE_WEBP:
imagewebp($newImage, $imagePath, 60);
break;
}
imagedestroy($source);
imagedestroy($newImage);
}
大部分图片可以压缩
在PHP中使用GD库处理图片时,遇到压缩后图片大小反而变大的情况,通常与图片的保存格式和压缩质量设置有关。对于PNG图片,尤其容易出现这种情况,因为PNG是一种无损压缩格式,其压缩效果很大程度上依赖于图像内容的复杂度。
imagepng()
函数的第三个参数设置了PNG图像的压缩级别。这个参数的范围是0(无压缩)到9(最大压缩)。然而,较高的压缩级别不一定会导致文件大小显著减小,特别是在图像内容复杂的情况下。在你的代码中,你可以尝试将PNG的压缩级别设置为不同的值,看看是否对文件大小有影响。此外,如果可能的话,考虑将某些图像转换为JPEG格式。
// 尝试调整PNG的压缩级别
imagepng($newImage, $imagePath, 9); // 使用最大压缩级别
// 或者,如果适用,将图像保存为JPEG
if ($type == IMAGETYPE_PNG) {
imagejpeg($newImage, $imagePath, 60); // 将PNG转换为JPEG并保存
}
请注意,将PNG转换为JPEG可能会导致图像质量的损失,因此请确保这在你的应用场景中是可接受的。
compressImage 压缩图片接口(安卓10.0.12版本支持,ios 10.0.15版本支持) 使用方法 AlipayJSBridge.call('compressImage', { apFilePaths: ["https://resource/apmlcc0ed184daffc5a0d8da86b2f518cf7b.image"], compressLevel: 4 }, f
本文向大家介绍Android图片压缩(质量压缩和尺寸压缩),包括了Android图片压缩(质量压缩和尺寸压缩)的使用技巧和注意事项,需要的朋友参考一下 在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成
请务必理解如下章节后阅读此章节: 安装 Node 和 gulp 使用 gulp 压缩 JS 访问论坛获取帮助 压缩 图片文件可降低文件大小,提高图片加载速度。 找到规律转换为 gulp 代码 规律 找到 images/ 目录下的所有文件,压缩它们,将压缩后的文件存放在 dist/images/ 目录下。 gulp 代码 你可以 下载所有示例代码 或 在线查看代码 一、安装 gulp-imagemi
本文向大家介绍C#无损压缩图片,包括了C#无损压缩图片的使用技巧和注意事项,需要的朋友参考一下 话不多说,请看代码: 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持呐喊教程!
browser-image-compression 浏览器端需要压缩图片,用browser-image-compression,发现图片质量下降,请问这个库会损坏图片质量吗? 类似tinypng的库有吗
本文向大家介绍java图片压缩工具类,包括了java图片压缩工具类的使用技巧和注意事项,需要的朋友参考一下 直接上java图片压缩code: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。