Tự động tối ưu hóa hình ảnh JPEG, PNG trên Centos 6.x

Trước đây mình thường tối ưu hóa hình ảnh bằng các công cụ trên máy tính trước khi upload lên, nhưng có vẻ hơi mất thời gian và công sức. Vì thế mình đã cố gắng tìm các công cụ để làm công việc này một cách tự động trên server, nhằm tiết kiệm một chút thời gian dành cho việc khác (quay tay chẳng hạn ).

Hiện nay có khá nhiều công cụ để tối ưu hóa hình ảnh trên CentOS, về chức năng và độ nén của chúng không có quá nhiều khác biệt. Nên trong bài viết này mình chỉ giới thiệu với các bạn 2 công cụ được nhiều người sử dụng nhất, đó là:

  • JpegOptim dùng để tối ưu hóa các hình ảnh JPEG (.jpg, .jpeg, .jpe .jif, .jfif, .jfi).
  • OptiPNG dùng để tối ưu hóa ảnh PNG.

1. Cài đặt

Vì JpegOptim và OptiPNG không có sẵn trong repo mặc định của CentOS, nên trước tiên bạn cần phải cài đặt thêm 2 repo: EPEL và RPMForge. Trong bài Cài đặt nginx, PHP 5.3, MySQL (LEMP) trên CentOS 6.x mình đã nói về 2 repo này rồi nên xin phép copy luôn từ bài đó:

Dùng lệnh

wget

để tải về, và cài đặt bằng lệnh

rpm -ivh

:

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -ivh epel-release-6-8.noarch.rpm rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm

Sau khi cài xong repo, bây giờ bạn mới có thể cài jpegoptimoptipng:

yum install jpegoptim optipng

2. Cách sử dụng

Bây giờ chúng ta hãy cùng tìm hiểu về cách sử dụng của 2 công cụ tối ưu hóa hình ảnh này.

Tối ưu hóa JPEG bằng JpegOptim

Đây là lệnh cơ bản của JpegOptim, nó chỉ có tác dụng trên thư mục đang thực thi lệnh này mà thôi:

jpegoptim *.jpg --max=80 --strip-all -p

Trong đó

--max

là chất lượng hình ảnh (từ

1-100

) xuất ra,

--strip-all

là xóa bỏ các thông tin kèm theo như địa điểm chụp, tên camera, khẩu độ, tiêu cự của lens…

-p

là giữ thời gian sửa đổi cuối (modification time) giống như ảnh gốc. Xem thêm cách dùng bằng lệnh

<em>jpegoptim</em> <em>-h</em>

.

Lệnh sau sẽ tìm tất cả những file .jpg có trong thư mục được chỉ định (bao gồm cả thư mục con) và thực hiện tối ưu lần lượt cho đến hết:

find /thu/muc/anh/ -iname *.jpg -exec jpegoptim --max=80 --strip-all -p {} \;

Thử nghiệm thực tế: ảnh gốc xuất ra từ Photoshop với chất lượng = 100, mình thử nghiệm với 3 mức sau để các bạn tham khảo (mình khuyên chọn mức 80 là OK nhất):

  • --max=50

    : hình ảnh trông rất tệ, dung lượng giảm khoảng 80%.

  • --max=80

    : hình ảnh trông khá ổn, dung lượng giảm khoảng 70%.

  • --max=90

    : hình ảnh đẹp không khác ảnh gốc là mấy, dung lượng giảm khoảng 60%.

jpg results tại Việt Nam Tutor

Xem hình demo tại đây (hình lớn):

Tối ưu hóa PNG bằng OptiPNG

Tương tự, lệnh cơ bản của OptiPNG:

optipng *.png -o7 -preserve

Trong đó

-o7

là mức độ nén được chọn (từ

-o1

đến

-o7

),

-preserve

là giữ thời gian sửa đổi (modification time) giống như ảnh gốc.

Lệnh sau sẽ tìm tất cả những file .png có trong thư mục được chỉ định (bao gồm cả thư mục con) và thực hiện tối ưu lần lượt cho đến hết:

find /thu/muc/anh/ -iname *.png -exec optipng -o7 -preserve {} \;

Đối với ảnh PNG thì mình luôn chọn mức độ nén cao nhất đó là

-o7

, bởi vì do đặc tính của ảnh PNG nên chất lượng ảnh sau nén gần như không thay đổi. Cũng vì lý do này nên ảnh PNG không thể nén mạnh như ảnhJPEG, và thời gian nén thì lâu hơn nhiều.

Ngoài ra OptiPNG cũng có thể tối ưu những hình ảnh không thuộc dạng PNG, và xuất ra file .png.

3. Tự động hóa bằng Cron job

Cron job (hay crontab) là một dịch vụ hỗ trợ chạy những lệnh trên CentOS một cách tự động tại một thời điểm đã chọn, ví dụ như 5 phút 1 lần, mỗi giờ… Vì thế đưa những lệnh trên vào cron job sẽ giúp việc tối ưu hóa hình ảnh của bạn trở nên đơn giản hơn bao giờ hết, gần như bạn không cần quan tâm đến nó nữa. Dùng lệnh sau để sửa crontab:

crontab -e

Copy các lệnh sau và dán vào:

@weekly find /thu/muc/anh/ -mtime -7 -iname *.jpg -exec jpegoptim --max=80 --strip-all -p {} \; > /dev/null
@weekly find /thu/muc/anh/ -mtime -7 -iname *.png -exec optipng -o7 -preserve {} \; > /dev/null

Ấn phím ESC, và gõ vào

:wq

rồi ấn phím Enter để thoát khỏi trình sửa cron job.

Cron job trên sẽ tự động chạy jpegoptim, optipng một lần/tuần vào ngày Chủ nhật

@weekly

, và chỉ tối ưu những hình ảnh mới upload trong 7 ngày gần nhất

-mtime -7

. Mình đưa vào tùy chọn này để tránh trường hợp tối ưu lại những hình ảnh đã được tối ưu trước đó rồi, nó không cần thiết và cũng làm mất đi một lượng tài nguyên (CPU, RAM) của server.

From: Sáu Ngón

VN:F [1.9.22_1171]
Rating: 0.0/7 (0 votes cast)

Phiếu giảm giá Hostgator 25%

Hostgator là nhà cung cấp hosting nổi tiếng và đáng tin cậy, đáng "đồng tiền bát gạo" mà bạn bỏ ra. Sử dụng mã giảm giá "VIETNAMTUTOR25" để được hưởng ưu đãi trên gói hosting của bạn!!
Giới thiệu tác giả Việt Nam Tutor

Tên mình đầy đủ là Nguyễn Văn Toàn sinh năm 1991. Sống tại Hà Lội. Hiện đang dò dẫm đi trên con đường Kiếm Tiền Online. Các bài viết của mình thực sự rất lủng củng, củ chuối. Mong được giao lưu vs bạn đọc và nhận được nhiều gạch đá, xi măng, sỏi để xây Việt Nam Tutor.

Website: http://vietnamtutor.com
Email: [email protected]
Skype: vietnamtutor

Tham gia bình luận

*