Các công cụ để tối ưu hóa JPEG? [đóng cửa]


114

Bạn có biết bất kỳ công cụ nào (ưu tiên dòng lệnh) để tối ưu hóa JPEG một cách tự động và không mất mát mà tôi có thể tích hợp vào môi trường xây dựng của chúng tôi không? Đối với PNG, tôi hiện đang sử dụng PNGOUT và nó thường tiết kiệm khoảng 40% băng thông / kích thước hình ảnh.

Ít nhất, tôi muốn một công cụ có thể tách siêu dữ liệu khỏi các JPG - tôi nhận thấy một trường hợp kỳ lạ khi tôi cố tạo hình thu nhỏ từ một bức ảnh và không thể làm cho nó nhỏ hơn 34 kB. Sau khi điều tra thêm, tôi thấy rằng dữ liệu EXIF ​​vẫn là một phần của hình ảnh và hình thu nhỏ là 3 kB sau khi xóa siêu dữ liệu.

Và hơn thế nữa - liệu có thể tối ưu hóa hơn nữa JPG mà không bị mất mát không? Trình tối ưu hóa PNG thử các chiến lược nén khác nhau, khởi tạo ngẫu nhiên bảng mã Huffmann, v.v.

Tôi biết rằng hầu hết các khoản tiết kiệm đến từ tham số chất lượng JPEG và đó là một thước đo khá chủ quan. Tôi chỉ tìm kiếm một công cụ có thể chạy như một bước xây dựng và có thể ép một vài byte từ hình ảnh một cách dễ dàng.


Bạn đang nói rằng có khoảng 10KB giá trị EXIF ​​trong một JPG được tối ưu hóa trước khi EXIF ​​bị xóa?!?!?! Tôi tự hỏi có gì trong đó!
net

Đó là khối EXIF toàn bộ từ một máy ảnh kỹ thuật số, bao gồm cả từng chi tiết nhỏ về bức ảnh này (tiếp xúc, thời gian màn trập, vv ...)
chris166

@netrox chris166 Những chi tiết đó không tốn nhiều dung lượng, thứ chiếm nhiều dung lượng là các bản xem trước (dữ liệu nhị phân).
Ariel

1
Hai bài báo so sánh thú vị, liệt kê các tiện ích được liệt kê bên dưới: So sánh các công cụ nén không mất dữ liệu JPEG, tháng 6 năm 2014 ; Tiêu chuẩn công cụ tối ưu hóa JPEG, tháng 2 năm 2013 .
dma_k

@Ariel: Hồ sơ ICC cũng có xu hướng chiếm dung lượng lớn. Tôi đã thấy hơn 500KB dữ liệu nhị phân hồ sơ ICC.
saurabheights

Câu trả lời:


68

Tôi sử dụng libjpeg cho các hoạt động không mất dữ liệu. Nó chứa một công cụ dòng lệnh jpegtran có thể làm tất cả những gì bạn muốn. Với tùy chọn dòng lệnh, -copy nonetất cả siêu dữ liệu sẽ bị loại bỏ và -optimizethực hiện tối ưu hóa nén Huffmann không mất dữ liệu. Bạn cũng có thể chuyển đổi hình ảnh sang chế độ liên tục -progressive, nhưng điều đó có thể gây ra sự cố tương thích (có ai biết thêm về điều đó không?)


5
Chà, nghe có vẻ đầy hứa hẹn. Nếu bất cứ ai quan tâm thì tải về cho Windows là tại gnuwin32.sourceforge.net/packages/jpeg.htm
chris166

Tôi sẽ cho cái này. Nó làm giảm hình nền của tôi từ 62 kB xuống 49 kB ở chế độ lũy tiến. Một hình ảnh khác (27 kB) được giảm xuống 23 kB. Tiết kiệm 15-20% mà không giảm chất lượng!
chris166

2
Tiến bộ hoạt động tốt về cơ bản mọi thứ, nhược điểm duy nhất là nó sử dụng nhiều CPU hơn để giải mã (không đủ bổ sung để giải mã).
Ariel

1
lon tiến bộ thường được lớn hơn ban đầu cho các tập tin dưới 9k
Collin Anderson

3
Tiến bộ cần nhiều bộ nhớ hơn để giải mã. Có thể phát trực tuyến các jpegs thông thường: bạn chỉ cần giải mã theo từng phần nhỏ. Để giải mã một jpg liên tục, bạn cần giữ toàn bộ hình ảnh đã giải nén trong bộ nhớ cùng một lúc.
jcupitt

72

Tôi đã viết GUI cho tất cả các công cụ tối ưu hóa hình ảnh mà tôi có thể tìm thấy , bao gồm cả MozJPEGjpegoptimtối ưu hóa bảng Huffman, quét liên tục và (tùy chọn) xóa siêu dữ liệu ẩn.

ImageOptim đánh bại nó

Nếu bạn không có máy Mac, tôi cũng có một giao diện web cơ bản hoạt động trên mọi nền tảng.


5
Thông minh! Bạn cần một nút Flattr. Hoặc tham gia Gittip.
Thilo

2
ImageOptim và ImageAlpha thật tuyệt vời!
Jon z

Công cụ tuyệt vời - gợi ý nhỏ. Tại sao lại hạn chế JPEGoptim ở chất lượng 80% - hình ảnh nền lớn thường bạn muốn giảm xuống 60% hoặc thậm chí thấp hơn. thx
niico

tại sao lại xóa dữ liệu EXIF? : /
Adrien Be

@AdrienBe 1. Quyền riêng tư. Bạn có thể không muốn mọi người trên mạng biết vị trí GPS của bạn. 2. bởi vì trong các tệp được lưu từ Photoshop có thể có hàng MB rác XML được nhúng trong tệp.
Kornel

12

[CHỈ CỬA SỔ]

RIOT (Công cụ tối ưu hóa hình ảnh cấp tiến) Đây là công cụ tối ưu hóa hình ảnh tuyệt vời nhất mà tôi đã tìm thấy!

http://luci.criosweb.ro/riot/

Bạn có thể dễ dàng nhận được hình ảnh 10MB xuống 800KB thông qua lấy mẫu phụ. Nó hỗ trợ PNG, GIF và JPEG. Nó thậm chí còn tích hợp vào menu ngữ cảnh để bạn có thể gửi ảnh thẳng đến đó. Cho phép bạn xoay, thay đổi kích thước, nén thành KB được chỉ định và hơn thế nữa. Cũng có các plugin cho GIMP và IrfanView và những thứ khác.

Ngoài ra còn có một DLL có sẵn nếu bạn muốn kết hợp nó vào các chương trình của riêng mình hoặc chương trình java script / c ++.

Một giải pháp thay thế khác là http://pnggauntlet.com/ PNGGAUNTLET mất vĩnh viễn nhưng nó hoạt động khá tốt.

[CHỈ CỬA SỔ]


7
Cảnh báo: RIOT có vẻ tốt nhưng nó cài đặt TuneUp và cứt mà không hỏi bạn, .. Tôi phân loại nó là Phần mềm độc hại.
Daniel W.

1
@DanFromGermany nói đúng. Xem đánh giá tại đây: download.cnet.com/RIOT/3000-12511_4-10911908.html#summaryList
RNickMcCandless

1
Nó không bao giờ làm cho đến gần đây.
Ben

Cảnh báo phần mềm độc hại! Chrome quản lý download cảnh báo Riot là phần mềm độc hại
ruhong

8
FYI: Có một tệp .zip di động cho RIOT không chứa phần mềm độc hại hoặc trình cài đặt dưới bất kỳ hình thức nào. Chỉ cần cuộn xuống trang tải xuống của họ. luci.criosweb.ro/riot/download
Goyuix

12

Một dịch vụ mới có tên JPEGmini tạo ra kết quả đáng kinh ngạc. Thật tiếc khi nó chỉ trực tuyến. Chỉnh sửa : Hiện có sẵn cho Windows và Mac


Bây giờ chúng ta có một máy Mac ứng dụng có sẵn (tiết lộ: Tôi đang trên nhóm phát triển)
DanJ

4
Tôi không biết bạn có phải là tác giả hay không, nhưng ứng dụng đó đang gây hiểu lầm cho người dùng. Nếu bạn chạy jpegquality.c trên các ảnh "mini" của chúng để phát hiện dung lượng nén, sau đó nén ảnh gốc bằng imagemagick với chất lượng như nhau => bạn sẽ nhận được kết quả giống nhau, các ảnh JPEG giống nhau ở cả hai ảnh. ImageMagick có thể mã nguồn mở, nhưng điều đó không làm cho nó ok để sử dụng nó và sau đó tuyên bố bạn đã phát triển một công nghệ nén mới
đẹp ass

@onetrickpony: Tôi không liên kết với họ theo bất kỳ cách nào.
Eduardo Molteni

@niceass Làm thế nào để bạn biết rằng JPEGmini đang sử dụng mã ImageMagick? Biết yếu tố chất lượng giống như đầu ra từ IM không phải là bằng chứng. Tôi đoán là họ cải tiến hình ảnh ở việc giảm các yếu tố chất lượng có lẽ với một chút lọc và họ sử dụng một số chỉ số chất lượng để quyết định thời điểm dừng.
công án

Tôi đã chạy JPEGmini mới nhất trên một hình ảnh mà tôi đã xuất trước đó từ ImageMagick và được báo cáo rằng JPEGmini đã được chạy trên đó - điều mà tôi không nhớ là đã làm. Chạy jpegtran -optimize -copy không có trên cùng một hình ảnh đã giảm kích thước 12 KB.
công án

10

Đã thử một số đề xuất ở trên - Cá nhân tôi sau khi nén không mất dữ liệu.

Hình ảnh mẫu của tôi có kích thước ban đầu là 67,737 byte.

Sử dụng kraken.io, nó giảm xuống còn 64.718 Sử dụng jpegtran, nó giảm xuống còn 64.718 Sử dụng yahoo smush-it, nó giảm xuống 61.746 Sử dụng imagemagick (-strip), nó giảm xuống 65.312

Tùy chọn smush.py có vẻ hứa hẹn nhưng quá trình cài đặt quá phức tạp khiến tôi không thể thực hiện nhanh chóng

jpegrescan cũng có vẻ hứa hẹn, nhưng có vẻ là unix và tôi đang sử dụng windows

jpegmini KHÔNG phải là không mất dữ liệu, nhưng tôi không thể phân biệt được (giảm xuống 22,172)

Ứng dụng Altrasoft jpegstripper của plinth không hoạt động trên windows 7 của tôi

jpegoptim không phải là cửa sổ - không tốt cho tôi

Riot (giữ chất lượng ở mức 100%) đã giảm nó xuống 63,416 và với việc lấy mẫu con màu sắc được đặt thành cao, nó đã giảm xuống 61,912 - tôi không biết liệu đó có phải là mất mát hay không và tôi nghĩ nó trông nhẹ hơn so với ban đầu .

Vì vậy, phán quyết của tôi là yahoo smushit nếu nó phải là không mất dữ liệu


jpegrescan hoạt động trên Windows nếu bạn cứng đầu. Nó cắt giảm kích thước như ma thuật (5-15% mà không giảm chất lượng), điều này thật tuyệt vời, bởi vì nó chỉ sắp xếp lại thứ tự quét liên tục AFAIK (bạn có thể nhận thấy điều tương tự trong các chương trình khác, các tệp đôi khi nhỏ hơn một chút trong Photoshop nếu bạn chọn số lần quét khác nhau, không có lý do rõ ràng). Ngoài ra, nó được tạo ra bởi một trong những người đã tạo ra x264, anh ấy quả là một thần đồng trong lĩnh vực nén.
Camilo Martin


7

ImageOptim thực sự rất mượt mà. Tùy chọn dòng lệnh được đăng bởi tác giả sẽ điền GUI và hiển thị tiến trình. Tôi đã sử dụng jpegtran để tối ưu hóa và chuyển đổi thành lũy tiến, sau đó là ImageOptim để tối ưu hóa tiến bộ hơn nữa và cho các loại tệp khác.

Sử dụng lại mã script cũng được tìm thấy trong diễn đàn này (tất cả các tệp được thay thế tại chỗ):

jpegtran

for file in $(find $DIR -type f \( -name "*.jpg" -or -name "*.jpeg" -or -name "*.JPG" \)); do
    echo found $file for optimizing...
    jpegtran -copy comments -optimize -progressive -outfile $file $file
done

ImageOptim

for file in $(find $DIR -type f \( -name "*.jpg" -or -name "*.png" -or -name "*.gif" \)); do
do
    echo found $file for optimizing...
    open -a ImageOptim.app $file
done

4

Trong trường hợp có ai đó dòm ngó, tôi đã viết một phiên bản ngoại tuyến của Yahoo's Smush.it. Nó sẽ tối ưu hóa dễ dàng pngs, jpgs và gif (động và tĩnh):

http://github.com/thebeansgroup/smush.py


Nó hoạt động tốt nhưng có một vấn đề với png nén :(

4

Bạn có thể sử dụng jpegoptim để tối ưu hóa các tệp jpeg theo mặc định. Các --strip-alltùy chọn dải tất cả các thông tin thêm nhúng. Bạn cũng có thể chỉ định chế độ mất dữ liệu bằng công --maxtắc này rất hữu ích khi bạn lưu ảnh với cài đặt chất lượng rất cao, ví dụ như không cần thiết. Nội dung web.

Bạn nhận được sự tối ưu hóa tương tự như với jpegtran (xem câu trả lời của OutOfMemory) nhưng jpegoptim không thể lưu vào jpegs lũy tiến.


4

Tôi đã viết một công cụ dòng lệnh có tên 'picopt' (tương tự như ImageOptim) sử dụng các chương trình bên ngoài để tối ưu hóa JPEG, PNG, GIFS, GIFS hoạt hình và thậm chí cả nội dung lưu trữ truyện tranh (CBR / CBZ).

Điều này phù hợp để sử dụng với homebrew trên hệ thống OS X hoặc Linux nơi bạn đã cài đặt các công cụ như jpegrescan, jpegtran, optipng, gifsicle, v.v.

https://github.com/ajslater/picopt


Có phiên bản windows của cái này không?
starbeamrainbowlabs

nếu bạn có thể cài đặt các phụ thuộc posix của nó trong môi trường windows như cygwin thì có thể. Tuy nhiên, bạn sẽ là người đầu tiên thử nghiệm nó.
AJ Slater

3

Tôi cũng muốn giới thiệu ImageMagick . Nó có tùy chọn dòng lệnh để loại bỏ siêu dữ liệu EXIF

mogrify -strip image.jpg

Có rất nhiều công cụ khác làm được điều tương tự.

Nếu giải nén lại ảnh JPEG thì không. JPEG bắt đầu bị mất hình ảnh, vì vậy bất kỳ hình thức giải nén nào cũng chỉ làm giảm chất lượng hình ảnh. Tuy nhiên, nếu bạn có hình ảnh được mã hóa không mất mát, một số bộ mã hóa hoạt động tốt hơn những bộ mã hóa khác. Tôi nhận thấy rằng ảnh JPEG được thực hiện bằng Photoshop luôn trông đẹp hơn so với khi được mã hóa bằng ImageMagick (mặc dù cùng kích thước tệp) do những lý do phức tạp . Hơn nữa (và điều này có liên quan đến bạn), tôi biết rằng ít nhất Photoshop có thể lưu ảnh JPEG dưới dạng tối ưu hóa , có nghĩa là chúng giảm khả năng tương thích với một số thứ mà bạn có thể không quan tâm để tiết kiệm một vài KB. Ngoài ra, hãy đảm bảo rằng bạn không nhúng bất kỳ cấu hình màu nào và bạn có thể tiết kiệm được một vài KB khác.


Hấp dẫn. Tôi luôn nghĩ chất lượng 90% là giống nhau trên tất cả các công cụ hình ảnh. Photoshop có phải là công cụ duy nhất sử dụng hệ số DCT được tối ưu hóa không?
chris166

1
Tôi mặc dù 90% sẽ giống nhau trên các công cụ khác nhau cho đến khi tôi thử lưu các hình ảnh giống nhau trong Photoshop và Imagemagick. Tôi thấy rằng khoảng 70% trong Save for Web trong Photoshop đã tạo ra các tệp có kích thước tương đương với 92% trong Imagemagick, nhưng các tệp Photoshop có chất lượng tốt hơn đáng kể. Tôi không biết các công cụ khác làm điều đó như thế nào.
David Johnstone

Bạn có biết cách thực hiện việc tước bỏ siêu dữ liệu EXIF ​​bằng phiên bản PHP của ImageMagick không?
Sonny

@Sonny Không thực sự, nhưng bạn có thể quan tâm đến chức năng này: php.net/manual/en/function.imagick-stripimage.php
David Johnstone

Cảm ơn David, đó là những gì tôi đã tìm thấy. Đây là chủ đề của tôi: stackoverflow.com/questions/2540068
Sonny,

2

Tôi khuyên bạn nên sử dụng http://kraken.io Đây là ứng dụng web cực nhanh sẽ tối ưu hóa các tệp PNG và JPEG của bạn tốt hơn nhiều so với smush.it.


2

Tôi khuyên bạn nên sử dụng JpegOptim, nó miễn phí và thực sự đẹp, bạn có thể chỉ định chất lượng, kích thước bạn muốn ... Và dễ sử dụng trong dòng lệnh.

JpegOptim


1

Tôi có thể giới thiệu điều này để gần như minh bạch:

convert 'yourfile.png' ppm:- | jpeg-recompress -t 97 -q veryhigh -a -m smallfry -s -r -S disable - yourfile.jpg

Nó sử dụng ImageMagick 's convertjpeg-recompresstừ jpeg-archive .

Cả hai đều là mã nguồn mở và hoạt động trên Windows, Mac và Linux. Bạn có thể muốn điều chỉnh các tùy chọn ở trên cho các kỳ vọng chất lượng khác nhau.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.