我想将位图的大小精确地减少到200kb.我从SD卡中获取一张图像,将其压缩并再次使用不同的名称将其保存到另一个目录中的SD卡中.压缩工作正常(3 mb像图像被压缩到大约100 kb).我为此编写了以下代码行:
String imagefile ="/sdcard/DCIM/100ANDRO/DSC_0530.jpg";
Bitmap bm = ShrinkBitmap(imagefile, 300, 300);
//this method compresses the image and saves into a location in sdcard
Bitmap ShrinkBitmap(String file, int width, int height){
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds = true;
Bitmap bitmap = BitmapFactory.decodeFile(file, bmpFactoryOptions);
int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/(float)height);
int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/(float)width);
if (heightRatio > 1 || widthRatio > 1)
{
if (heightRatio > widthRatio)
{
bmpFactoryOptions.inSampleSize = heightRatio;
} else {
bmpFactoryOptions.inSampleSize = widthRatio;
}
}
bmpFactoryOptions.inJustDecodeBounds = false; …Run Code Online (Sandbox Code Playgroud) 在Google Chrome中运行Page Speed时,建议优化/压缩图像.这些图像大多是由用户上传的,因此我需要在上传过程中对其进行优化.我发现用PHP优化jpeg图像就像使用以下GD功能:
getimagesize()
imagecreatefromjpeg()
imagejpeg()
Run Code Online (Sandbox Code Playgroud)
因为我上载后调整图像我已经通过这些功能,拉动图像,另外我用imagecopyresampled()后imagecreatefromjpeg()调整其大小.
但是,Page Speed仍然告诉我这些图像可以进行优化.如何在php脚本中完成此优化?在imagejpeg()中设置较低的质量也没有区别.
我介绍了如何在图像和视频压缩标准中使用DCT(离散余弦变换).
但是为什么DCT仅比dft或dst等其他变换更受欢迎?
这个问题可能是一个"开放式问题",很多人可能都渴望关闭它,但请不要.让我解释.
众所周知,JPEG有两种压缩方式(至少在Photoshop保存对话框中)
我之前已经阅读了很多PNG/JPEG优化文章,但现在我从一个狂野的随机谷歌图像搜索中遇到了这种令人敬畏的第三种压缩.有问题的JPEG就是这个
http://storage.googleapis.com/marc-pres/boston-event-1012/images/google-data-center.jpg
尝试在Chrome/Firefox中加载链接(仅在IE/Safari中,直到图像完全加载然后显示)
你可以观察到:
我尝试使用模拟的非常慢的连接再次加载它,并观察到JPEG不仅按通道顺序加载,而且以渐进方式加载.因此,首先加载的图像是空白和白色马赛克然后绿色马赛克然后逐渐全彩色马赛克,最后是全分辨率和全彩色图像.
这是一项了不起的技术,假设您正在构建一个电子杂志,每个页面都有很多图片,您希望用户快速翻阅浏览页面,这种图像正是最有效的.要进行快速预览,请加载blank-n-white缩略图,如果用户停留,则完全加载原始图像.
所以我的问题是:我如何使用Python Pillow或ImageMagick或任何类型的开源软件生成这样的图像?
如果您认为这个问题不合适,请发表评论,不要只是关闭它.
更新1:
更新2:我找到了另一条线索
jpeg imagemagick image-processing image-compression python-imaging-library
我有这张图片(我在 SGS 9 plus 上拍摄的照片):未压缩的 JPG 图像。它的大小为 4032 x 3024,重量约为 3MB。我用TinyJPG Compressor压缩了它,它的重量是1.3MB。对于 PNG 图像,我使用了Online-Convert,我看到 webp 图像甚至比使用TinyPNG压缩的图像小得多。我期待类似的东西,尤其是我读了一篇文章JPG 到 WebP - 比较压缩大小,其中 WEBP 比压缩的 JPG 小得多。但是当我在各种在线图片转换工具中将我的JPG转换为WEBP格式时,我看到1.5-2MB大小,所以文件比我压缩的 JPG 大。我错过了什么吗?WEBP应该不会比压缩后的JPG小很多吧?预先感谢您的每一个答案。
我正在使用名为TMX的命令行工具(https://github.com/tonybeltramelli/TMXResolutionTool)我想在某个文件夹中的每个.png文件上执行此命令.我怎样才能做到这一点?
这是它的使用方式:
TMXResolutionTool <tmx path> <resize ratio>
TMXResolutionTool <image path> <resize ratio>
TMXResolutionTool <image path> <new width> <new height>
Run Code Online (Sandbox Code Playgroud)
干杯.
我正在使用PHP Imagick运行时调整图像大小.该网站有一个图片上传功能,我们不能信任用户使用Web友好JPEGs,因为在mass-import有许多3对5MB图像,甚至一些大的13MB.每个图像都变成了一个缩略图(200x200),当从列表视图进入详细视图时,只显示一个图像,所以性能不是很大,尽管我们不能完全抛弃它.这是我们到目前为止所做的事情:
$iMagick = new Imagick($file);
$iMagick->setImageResolution(72,72);
$iMagick->resampleImage(72,72,imagick::FILTER_UNDEFINED,1);
$geometry = $iMagick->getImageGeometry();
if ($geometry['height'] > 1920 || $geometry['width'] > 1080) {
$iMagick->scaleImage(1920, 0);
if($geometry['height'] > $resizeHeight) {
$iMagick->scaleImage(0, 1080);
}
}
$iMagick->setImageCompression(Imagick::COMPRESSION_JPEG);
$iMagick->setImageCompressionQuality($compression);
$iMagick->writeImage($file);
$Imagick->clear();
Run Code Online (Sandbox Code Playgroud)
旁注:我刚刚在条件逻辑中意识到高度/宽度的缺陷,所以暂时忽略它.我会很快编辑这个问题,以反映正确的条件比较.对于那些没有抓住它的人来说,它将所有图像缩放到1920宽度,即使它应该是缩放高度,然后在缩放之后将其缩小到最大尺寸1080 height.
我用来测试的3MB 2398×2400图像以图像开始.将其缩放以1079x1080产生1.5MB图像,然后按JPEG质量添加压缩70将其降低到750KB.使用kraken.io,图像能够被压缩到不到60KB.我还能对这个脚本做些什么,因为它需要在运行时优化图像吗?
我已经阅读了使用已安装的libjpeg的建议,但我找不到任何关于它启用的功能的文档,或者是否有办法强制Imagick专门使用它.我甚至不确定Imagick是不是已经使用过它了.
编辑:解决方案
function itm_optimizeImage($file, $compression = 70, $maxDimensions = ['width' => null, …Run Code Online (Sandbox Code Playgroud)
我有一些.GIF格式的图像,我想压缩.但我得到的输出相同或几乎没有2-5%压缩.我需要更高的压缩比,以便网页可以快速加载.目前我正在使用gifsicle工具,但几乎没有发现生成的gif图像的大小有太大差异.我从雅虎选择了这个工具.
gifsicle -O3 gifimage1.gif -o new-gifimage1.gif
Run Code Online (Sandbox Code Playgroud) 有没有办法压缩图像而不将其完全加载到内存中?据我了解BitmapFactory.decodeStream和类似的方法加载内存中的所有内容,只有在加载整个图片后,它才能通过压缩Bitmap.compress
我的任务是将图片从android发送到服务器
jpeg ×4
android ×3
image ×2
php ×2
bitmap ×1
bitmapimage ×1
command-line ×1
dct ×1
fft ×1
gd ×1
gifsicle ×1
imagemagick ×1
imagick ×1
libjpeg ×1
macos ×1
performance ×1
webp ×1