`
hongtoushizi
  • 浏览: 374774 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

jpg/jpeg图片优化之jpegoptim

阅读更多

一、前话

对于图片优化,可能很多人都有这个想法,但是真正用于实践的人真的不多。

在chrome下使用pagespeed可以很清楚的看到在中优先级里,有一个项名为:优化图片,说的就是图片优化的事。里面列出网站所有可以压缩的图片。

基于对google的信任和崇拜,自然要弄明白用的是什么工具,然后查了一下官方文档,说是对于jpg/jpeg文件推荐使用jpegoptim进行压缩,但是没有说怎么去使用参数。这样就出现了本文。

二、jpegoptim使用

在网上找到了一篇文章:jpegoptim 优化 jpeg 图片,里面提供的一个方法是:jpegoptim –strip-com –strip-exif –strip-iptc -m85 ./IMG_4542.jpg

基于这些隔参数写了一个基于nodejs的压缩jpg脚本:

大致思路:

  1. 获取到对于的源文件,执行jpegoptim。
  2. 循环遍历文件里不是jpg/jpeg文件,判断是否是文件目录,是的话执行第一步

具体源码:

/**
 *  jpg图片优化
 *  使用:node jpg.js sourceDirname receiveDirname
 *  采用了jpepoptim工具
 *
 */
var path = require('path'),
    fs = require('fs'),
    child_process = require('child_process'),
    exec = child_process.exec,
    tplCommand = 'jpegoptim --dest={r} -f -m85 --strip-com --strip-exif --strip-iptc {s}',
    sourceDir = process.argv[2] && path.resolve(process.argv[2]),
    receiveDir = process.argv[3] && path.resolve(process.argv[3]),
    jpgReg = /\.(jpg|jpeg)$/;

console.log(sourceDir, receiveDir);
if (!isDirectory(sourceDir)) {
    console.log('source dirname is require.');
    process.exit(1);
}
// 判断是否有receive文件目录,没有在sourceDir的路径创建一个**_optimize目录
if (!receiveDir) {
    receiveDir = sourceDir + '_optimize';
    console.log('Need add receiveDir:', receiveDir);
    if (!isDirectory(receiveDir)) {
        fs.mkdirSync(receiveDir);
    }
}
// 判断是否存在给定文件地址,没有则创建它
if (!isDirectory(receiveDir)) {
    console.log('mkdir:', receiveDir);
    fs.mkdirSync(receiveDir);
}

console.log('sourceDir:', sourceDir, ' receiveDir: ', receiveDir);
/**
 * @description: 优化处理函数
 * @param: dirname 文件目录的绝对路径,如:/home/ys/project/
 * @param: pathname 文件相对于要压缩的目录的路径,如:pic/
 */
function optimize(dirname, pathname) {
    fs.readdir(dirname, function(err, files) {
        if (err) {
            console.log('Readdir:', dirname, err);
            process.exit(1);
        } else {
            console.log(files);
            var l = files.length,
                filepath;
            // 空文件情况
            if (l > 0) {
                compressJpeg(dirname, pathname);
                while(l--) {
                    if (!jpgReg.test(files[l])) {
                        filepath = path.resolve(dirname, files[l]);
                        if (isDirectory(filepath)) {
                            optimize(filepath, files[l]);
                        } else {
                            console.log('No such dirname:', filepath);
                        }
                    }
                }
            }
        }
    });
}

/**
 * @description:压缩目录下所有的jpg,jpeg文件
 * @param: dirname 文件目录的绝对路径,如:/home/ys/project/
 * @param: pathname 文件相对于要压缩的目录的路径,如:pic/
 */
function compressJpeg(dirname, pathname) {
    var receive = path.resolve(receiveDir, pathname);
    if (path !== '') {
        if (!isDirectory(receive)) {
            fs.mkdirSync(receive);
        }
    }
    var data = {
        s : path.resolve(dirname, '*'),
        r : receive
    },
    command = tplCommand.replace(/{(\w+)}/g, function($0, $1) {
        return data[$1];
    });
    console.log(command)
    exec(command, function(err, stdout) {
        if (err) {
            console.log("Exec err: ", err);
            // process.exit(1);
        }
        console.log('optimize folder:', stdout);
    });
}

/**
 * @description: 是否是一个文件目录
 * @param: path 文件目录
 */
function isDirectory(path) {
    if (fs.existsSync(path)) {
        return fs.statSync(path).isDirectory();
    }
    return false;
}
optimize(sourceDir, '');


转载自: http://www.bokeyy.com/post/jpgjpeg%E5%9B%BE%E7%89%87%E4%BC%98%E5%8C%96%E4%B9%8Bjpegoptim.html
分享到:
评论

相关推荐

    jpegoptim-1.4.1.tar.gz

    JPEGOptim是一款开源的命令行工具,主要用于优化JPEG图片文件,从而减小它们的体积,同时尽可能保持原有的图像质量。这个工具在Linux环境下广泛使用,适用于网站管理员、开发者或者任何需要处理大量JPEG图像的用户。...

    Linux系统下在命令行中压缩JPEG图像的方法.docx

    无损压缩JPEG图像,可以简单地在命令行中输入`jpegoptim photo.jpg`,这里的`photo.jpg`是你要压缩的图像文件名。这个命令会尝试优化图像,如果能够降低文件大小而不影响质量,原始图像将被覆盖。如果`jpegoptim`...

    optimise-images:使用ImageMagick转换,OptiPNG,JpegOptim和可选的ZopfliPNG,Guetzli和MozJPEG批处理图像大小调整器,优化器和分析器

    optimise-images.sh 使用 convert, , 和可选的 , 和批处理jpg,jpeg和png图像缩放器,优化器和图像分析器(Guetzli正在进行中)。从Dockerfile构建Docker映像手动Docker构建通过dockerbuild.sh 安装要安装在/root...

    jpegoptim-开源

    **JPEGoptim 开源工具详解** JPEGoptim 是一个高效且易用的开源工具,主要用于优化和压缩 JPEG 图像文件,以减少它们的存储空间占用,同时尽...无论是个人还是企业,JPEGoptim 都是图像优化领域不可或缺的工具之一。

    jpegoptim-bin:jpegoptim bin-wrapper,使其可以无缝地用作本地依赖项

    jpegoptim-bin 是用于优化JPEG文件的实用程序,可提供无损优化(基于优化霍夫曼表)和基于设置最大质量因数的“有损”优化您可能需要来代替。安装$ npm install jpegoptim-bin确保您具有正确的libjpeg版本。 有关更...

    图片压缩工具

    除了PNG压缩,描述中还提到了JPG(JPEG)图片的压缩。JPEG是另一种常见的图像格式,尤其适用于照片,它采用有损压缩方法,牺牲部分质量以换取更小的文件尺寸。"jpegoptim.exe"和"jpegtran.exe"是两个常用的JPEG压缩...

    银河麒麟系统使用命令行批量压缩图片

    jpegoptim是一个命令行工具,可以用来优化和压缩JPEG, JPG和JFIF文件,而不损失其实际质量。该工具支持无损优化,这是基于优化霍夫曼表的算法。 压缩图片至指定大小,写了2个sh文件,直接双击运行,方便使用。

    image-optimizer:优化 PNG、JPEG 图片

    优化器优化图像 JPG、PNG。安装npm install image-optimizer科莫 Optimizer = require ' image-optimizer 'optimizer = new Optimizer src : ' /path/to/src.ext ' dest : ' /path/to/dest.ext ' options : pngquant...

    使用PHP轻松优化图像

    例如,OptiPNG用于优化PNG,jpegoptim专攻JPG,而ImageMagick是一个全能型工具,可以处理多种格式。 Spatie是一家知名的比利时软件开发公司,他们创建的ImageOptimizer库(在压缩包子文件的文件名"spatie-image-...

    Laravel开发-laravel-image-optimizer

    3. **缓存策略**:考虑到优化过程可能消耗服务器资源,可以考虑缓存优化后的图片,避免重复优化。 4. **CDN集成**:配合内容分发网络(CDN),可以进一步提升图片加载速度,减轻服务器压力。 总结,`laravel-image-...

    图片、相片批量压缩工具imageoptimizer

    软件支持多种常见的图片格式,如JPEG、PNG、GIF等。 在添加图片后,用户可以设置压缩参数。ImageOptimizer允许用户自定义压缩级别,以平衡图片质量和文件大小。默认情况下,软件会自动调整,但用户也可以根据需求...

    optimize_and_resize_images_bulkly:这是Linux的shell脚本,用于优化all子目录中的所有jpeg文件并调整其大小

    这是Linux的Shell脚本,用于优化all子目录中的所有jpeg文件并调整其大小。 首先,您需要安装jpegoptim和imagemagick。 如果要使用,请在第2行上更改目录。如果要更改子目录的深度,请在第2行上更改-maxdepth。如果...

    img-optimize:图像优化bash脚本

    `jpegoptim`专用于优化JPEG文件,它能智能地调整图像质量,同时保持视觉上的可接受性。`optipng`则是PNG图像的优化工具,它能删除不必要的元数据并应用最佳的压缩设置。 “image-compression”和“image-...

    image-optimize-command:使用WP CLI轻松优化图像

    Image Optimize Command是用于的WP CLI包装,它通过在各种图像运行来优化gif , jpeg , jpg , png , svg , webp图像。 阅读有关我为何创建它。 用法 # optimize specific attachments $ wp image-optimize ...

Global site tag (gtag.js) - Google Analytics