承接 typisttech/image-optimize-command 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

typisttech/image-optimize-command

Composer 安装命令:

composer require typisttech/image-optimize-command

包简介

Easily optimize images using WP CLI

README 文档

README

Image Optimize Command

Packagist Packagist PHP from Packagist CircleCI Codecov license Twitter Follow @TangRufus Hire Typist Tech

Easily optimize images using WP CLI

Built with ♥ by Typist Tech

Image Optimize Command is an open source project and completely free to use.

However, the amount of effort needed to maintain and develop new features is not sustainable without proper financial backing. If you have the capability, please consider donating using the links below:

GitHub via Sponsor Sponsor via PayPal More Sponsorship Information

Image Optimize Command is a WP CLI wrapper for spatie/image-optimizer which optimize gif, jpeg, jpg, png, svg, webp images by running them through a chain of various image optimization tools. Read the introductory blog post about why I built it.

Usage

# optimize specific attachments
$ wp image-optimize attachment 123 223 323

# optimize certain number of attachments
$ wp image-optimize batch --limit=20

# restore the full sized images of specific attachments
$ wp image-optimize restore 123 223 323
$ wp media regenerate 123 223 323

# restore all full sized images and drop all meta flags
$ wp image-optimize reset
$ wp media regenerate

# Find and optimize images under a given directory **without backup**
$ wp image-optimize find /path/to/my/directory --extensions=gif,jpeg,jpg,png,svg,webp

# shortcusts for `wp image-optimize find` **without backup**
$ wp image-optimize mu-plugins
$ wp image-optimize plugins
$ wp image-optimize themes
$ wp image-optimize wp-admin
$ wp image-optimize wp-includes

# learn more
$ wp help image-optimize
$ wp help image-optimize <subcommand>

Typist Tech is ready to build your next awesome WordPress site. Hire us!

Requirements

  • PHP v7.2 or later
  • WP-CLI v2.3.0 or greater

Since wp-cli/wp-cli-bundle bundles an older version of symfony/process which incompatible with spatie/image-optimizer, WP-CLI must be installed via composer.

Installation

$ wp package install typisttech/image-optimize-command:@stable

Optimization tools

Under the hood, image-optimize-command invokes spatie/image-optimizer which requires these binaries installed:

Check spatie/image-optimizer's readme for install instructions.

SVGO and cwebp are optional

Note that WordPress doesn't support svg files out of the box. You can omit SVGO. However, if you have enabled WordPress svg support and uploaded svg files to WordPress media library, you must install SVGO. Otherwise, the command will fail.

Same goes for cwebp.

Use Cases

First use

This command optimize both the full sized image(the one you uploaded) and the thumbnails(WordPress auto-resize these images for you).

Chances are the thumbnails are missing or never generated:

  • theme switched after upload
  • plugins activated after upload
  • deleted the images from disk but not updated WordPress' database

Simplest solution is to regenerate thumbnails then optimize:

$ wp media regenerate
$ wp image-optimize batch --limit=9999999

$ wp image-optimize mu-plugins
$ wp image-optimize plugins
$ wp image-optimize themes
$ wp image-optimize wp-admin
$ wp image-optimize wp-includes

After upgrading WordPress core / plugins / themes

$ wp image-optimize mu-plugins
$ wp image-optimize plugins
$ wp image-optimize themes
$ wp image-optimize wp-admin
$ wp image-optimize wp-includes

Restoring the originals

This command backs up the full sized images before optimizing attachments. If you want to restore them:

# optimize
$ wp image-optimize attachment 123

# restore the full sized image
$ wp image-optimize restore 123
# regenerate the thumbnails from the original full sized image
$ wp media regenerate 123

Migrating from image-optimize-command v0.1.x

Starting from v0.2, this command backs up the full sized images before optimizing attachments. To migrate from image-optimize-command v0.1.x:

$ wp image-optimize reset
$ wp media regenerate
$ wp image-optimize batch --limit=9999999

FAQs

What kind of optimization it does?

Mostly applying compression, removing metadata and reducing the number of colors to gif, jpeg, jpg, png, svg, webp images. The package is smart enough pick the right tool for the right image.

Check Freek Van der Herten's article explaining spatie/image-optimizer's sane default configuration.

How to customize the optimization?

use Spatie\ImageOptimizer\OptimizerChain;

add_filter('TypistTech/ImageOptimizeCommand/OptimizerChain', function (OptimizerChain $optimizerChain): OptimizerChain {
    // Option A: Send messages to $optimizerChain.
    $optimizerChain->setTimeout($xxx);
    $optimizerChain->useLogger($yyy);
    $optimizerChain->addOptimizer($zzz);

    // Option B: Make a new $optimizerChain.
    // See: https://github.com/spatie/image-optimizer/blob/master/src/OptimizerChainFactory.php
    $optimizerChain = new OptimizerChain();
    $optimizerChain->addOptimizer($zzz);

    // Finally
    return $optimizerChain;
});

How to skip backups / restorations?

⚠️ The optimzation is lossy. If you skip backing up the original files, there is no way to recover the original files. Proceed with caution.

use TypistTech\ImageOptimizeCommand\Operations\AttachmentImages\Backup;
use TypistTech\ImageOptimizeCommand\Operations\AttachmentImages\Restore;

add_filter('TypistTech/ImageOptimizeCommand/Operations/AttachmentImages/Backup', function (): Backup {
    // TODO: You have to implement a null backup class.
    return $myNullBackupObject;
});

add_filter('TypistTech/ImageOptimizeCommand/Operations/AttachmentImages/Restore', function (): Restore {
    // TODO: You have to implement a null restore class.
    return $myNullRestoreObject;
});

It would be nice to have those 2 null operations in a separate package. Submit pull requests to mention it in this readme if you have implemented it.

Does running wp image-optimize attachment / batch multiple times trigger multiple optimization for the same attachments?

No.

By default, boolean flags (meta fields) are given to attachments after optimization. This is to prevent re-optimizing an already optimized attachment. If you changed the image files (e.g.: resize / regenerate thumbnail), you must first reset their meta flags.

Note: The find subcommand and its shortcuts don't create meta flags.

Will the images look different after optimization?

Yes, a little bit. This is lossy optimization. However, you won't notice the difference unless you have a trained eye for that.

See spatie/image-optimizer's readme on binary options used.

Why my GIFs stopped animating?

When you upload an image using the media uploader, WordPress automatically creates several copies of that image in different sizes...When creating new image sizes for animated GIFs, WordPress ends up saving only the first frame of the GIF...

--- wpbeginner

Luckily for you, Lasse M. Tvedt showed how to stop WordPress from resizing GIFs on StackExchange.

Can I use this on managed hosting?

No, you can't use this on managed hosting such as Kinsta, Flywheel or WP Engine because they prohibit installing the binaries.

If you must use it on managed hosting, hire a developer to add SaaS provider integration:

Do I have to install SVGO or cwebp?

No, if you don't have any svg files in WordPress media library.

Yes, if you have:

Same goes for cwebp.

PHP Fatal error: Allowed memory size of 999999 bytes exhausted (tried to allocate 99 bytes)

This is a common WP CLI issue. See: https://bit.ly/wpclimem

Does it have a limits or quotas?

No, unlike other SaaS alternatives, this package runs on your server without any limitation on file sizes or a monthly quota. Totally free of charge.

Is it for everyone?

No, it comes at a cost. Optimization is CPU intensive. Expect CPU usage rockets up to 100% during optimization. Schedule it to run at late night in small batches.

Learn more on this article.

Will you add support for older PHP versions?

Never! This plugin will only work on actively supported PHP versions.

Don't use it on end of life or security fixes only PHP versions.

It looks awesome. Where can I find some more goodies like this

Where can I give 5-star reviews?

Thanks! Glad you like it. It's important to let me knows somebody is using this project. Please consider:

Testing

Run the tests:

$ composer test
$ composer style:check

Feedback

Please provide feedback! We want to make this project as useful as possible. Please submit an issue and point out what you do and don't like, or fork the project and send pull requests. No issue is too small.

Security Vulnerabilities

If you discover a security vulnerability within this project, please email us at image-optimize-command@typist.tech. All security vulnerabilities will be promptly addressed.

Credits

Image Optimize Command is a Typist Tech project and maintained by Tang Rufus, freelance developer for hire.

Special thanks to Freek Van der Herten whose spatie/image-optimizer package makes this project possible.

Full list of contributors can be found here.

License

Image Optimize Command is released under the MIT License.

typisttech/image-optimize-command 适用场景与选型建议

typisttech/image-optimize-command 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.04k 次下载、GitHub Stars 达 172, 最近一次更新时间为 2018 年 01 月 26 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「compression」 「wordpress」 「optipng」 「wp」 「wp-cli」 「svgo」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 typisttech/image-optimize-command 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 typisttech/image-optimize-command 我们能提供哪些服务?
定制开发 / 二次开发

基于 typisttech/image-optimize-command 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 2.04k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 172
  • 点击次数: 18
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 172
  • Watchers: 5
  • Forks: 19
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2018-01-26