Đo thật, không hứa suông

Hiệu năng

Mọi con số trên trang này đều đo trên ảnh thật, bằng một chiếc laptop bình thường (Apple M3, 16 GB). Script đo nằm ngay trong repo, ai cũng có thể chạy lại. Dưới mỗi biểu đồ là ý nghĩa của nó với ảnh in của bạn, và cuối trang là giải thích cho các thuật ngữ đứng sau con số.

Tốc độ: một nghìn ảnh trong chớp mắt

Khi mở một thư mục, Fotollection chỉ đọc thông tin EXIF và ảnh thu nhỏ có sẵn trong file, chứ không đọc cả ảnh: 1.000 ảnh mất 0,12 giây, nhanh gấp tám lần mức ngân sách đặt ra trước khi viết code. Đổi một thiết lập thì bản xem trước vẽ lại trong 17 ms, chưa bằng hai lần màn hình làm tươi. Xuất ảnh đạt 18 ảnh mỗi giây ở chất lượng đầy đủ 16 MP. Rust chạy trực tiếp trên máy cũng hơn trình duyệt web làm cùng việc: xuất ảnh nhanh ngang, xem trước nhanh hơn và tốn ít hơn một phần tư bộ nhớ.

Tốc độ và bộ nhớ, so với ngân sách đặt ra trước khi viết code
Tốc độ và bộ nhớ, so với ngân sách đặt ra trước khi viết code
Cùng một việc, trên Fotollection và trên trình duyệt web
Cùng một việc, trên Fotollection và trên trình duyệt web

Bộ nhớ: 5.035 ảnh vẫn không tăng

Một chuyến đi có thể có hàng nghìn ảnh. Fotollection chỉ giữ vài byte cho mỗi ảnh trong bộ nhớ, ghi ảnh thu nhỏ ra ổ đĩa và xử lý tối đa sáu ảnh cỡ lớn cùng lúc. Với số ảnh gấp 53 lần, bộ nhớ cao nhất chỉ tăng 0,1 GB: 1,35 GB với 95 ảnh, 1,45 GB với 5.035 ảnh, dưới xa mức trần 2 GB.

Bộ nhớ cao nhất khi số ảnh tăng lên 5.035 tấm
Bộ nhớ cao nhất khi số ảnh tăng lên 5.035 tấm

Chất lượng in: ảnh in giống ảnh gốc

Ảnh in qua web editor thường trông nông màu. Chúng tôi đã đo xem vì sao: web editor bỏ mất colour profile (ảnh iPhone mất 13 % độ bão hoà màu), thu ảnh xuống 2.000 px rồi để tiệm in phóng to lại (mất 87 % chi tiết nhỏ), và lưu ở chất lượng 80 với độ phân giải màu giảm một nửa. Fotollection giữ nguyên profile, xuất ở độ phân giải đầy đủ, 4:4:4, chất lượng 95, và sai lệch màu chỉ 0,19, thấp hơn rất xa mức 1 mà mắt người bắt đầu nhận ra.

Bản xuất giữ lại được bao nhiêu so với ảnh gốc, so với một trình sửa ảnh web thông thường
Bản xuất giữ lại được bao nhiêu so với ảnh gốc, so với một trình sửa ảnh web thông thường

Ảnh cho Facebook và Instagram: nhẹ mà vẫn đúng là ảnh của bạn

Facebook thu mọi ảnh về 2.048 px, nén lại và bỏ qua colour profile. Kiểu xuất Mạng xã hội làm trước những việc đó cho đúng: chuyển ảnh sang sRGB, thu nhỏ bằng bộ lọc chất lượng cao, làm nét nhẹ và lưu đúng cỡ để Facebook không phải thu nhỏ thêm. Sau khi Facebook nén lại, ảnh vẫn giống ảnh gốc hơn cách làm thông thường, và ảnh Display P3 kiểu iPhone giữ được 99,6 % màu thay vì 86 %. Lựa chọn Giữ cỡ gốc giữ nguyên từng điểm ảnh mà file chỉ còn khoảng một nửa, sai lệch màu dưới 1.

Ảnh đăng Facebook: người xem thấy gì sau khi Facebook nén lại
Ảnh đăng Facebook: người xem thấy gì sau khi Facebook nén lại

Gợi ý ảnh đẹp nhất: đối chiếu với lựa chọn của người thật

Chúng tôi tự tay chia 95 ảnh thật thành 22 khoảnh khắc, và chọn ảnh đẹp nhất ở những khoảnh khắc có ảnh đẹp rõ ràng. Fotollection tìm ra 15 khoảnh khắc mà không bao giờ gộp nhầm hai khoảnh khắc khác nhau, và ảnh được gợi ý đều chấp nhận được ở cả sáu khoảnh khắc có ảnh đẹp nhất rõ ràng. Mỗi ảnh được phân tích trong 17 ms, 28 ms nếu có khuôn mặt.

Gợi ý ảnh đẹp nhất, chấm điểm so với ảnh do người chọn tay
Gợi ý ảnh đẹp nhất, chấm điểm so với ảnh do người chọn tay

Giải thích các thuật ngữ

Những từ chuyên môn về ảnh và in ảnh, giải thích như kể cho một người bạn.

ΔE (Delta E) là gì?

ΔE đo hai màu trông khác nhau bao nhiêu với mắt người, tính trong một không gian màu được dựng theo cách mắt người cảm nhận (CIELAB, theo công thức năm 2000). 0 là giống hệt. Khoảng 1 là mức khác biệt nhỏ nhất mà một người có mắt tinh nhận ra khi đặt hai màu cạnh nhau; 2 đến 3 thì phần lớn mọi người đều thấy; trên 5 là hai màu khác hẳn. Bản xuất để in của Fotollection có ΔE trung bình 0,19.

SSIM là gì?

SSIM (chỉ số tương đồng cấu trúc) so hình dạng và kết cấu của hai ảnh thay vì từng điểm ảnh riêng lẻ, gần với cách mắt ta nhận ra ảnh bị mờ hay bị nén vỡ khối. 1 là giống hệt. Từ khoảng 0,98 trở lên, đa số người không phân biệt được hai ảnh nếu không phóng to.

Một file JPEG chứa được bao nhiêu màu?

JPEG lưu 8 bit cho mỗi kênh đỏ, xanh lá và xanh dương: mỗi kênh 256 mức, tổng cộng khoảng 16,7 triệu màu. Đó cũng là thứ máy in ảnh dùng để in. File RAW của máy ảnh có 12 đến 14 bit, iPhone đời mới có thể lưu HEIC 10 bit, rất có ích khi chỉnh sửa; còn với ảnh in hoàn chỉnh, một file JPEG 8 bit làm tốt không lộ vệt chuyển màu.

JPG hay JPEG? Có nên dùng PNG không?

JPG và JPEG là cùng một định dạng: Windows ngày xưa chỉ cho phép đuôi file ba chữ. PNG nén không mất dữ liệu nên không bỏ đi chút nào, nhưng ảnh chụp lưu dạng PNG thường nặng gấp ba đến năm lần, và đa số máy in ảnh, tiệm in đều yêu cầu JPEG. Một file JPEG chất lượng 95, đủ độ phân giải màu (4:4:4) như Fotollection xuất để in, in ra không phân biệt được với ảnh gốc.

4:4:4 và 4:2:0 nghĩa là gì?

Mắt ta nhìn chi tiết chủ yếu qua độ sáng, ít qua màu, nên JPEG có thể lưu màu ở độ phân giải thấp hơn. 4:4:4 giữ đủ độ phân giải màu; 4:2:0 chỉ giữ một phần tư, file nhẹ hơn nhưng các viền có màu bị mềm đi, như chữ đỏ hay bầu trời xanh sau tán lá. Ảnh in nên dùng 4:4:4; còn mạng xã hội thì đằng nào cũng nén mọi ảnh về 4:2:0.

sRGB, Display P3 và colour profile

Colour profile cho phần mềm biết các con số trong file nghĩa là màu nào. sRGB là dải màu cổ điển dùng trên web. Display P3, dùng trên iPhone và các máy ảnh mới, rộng hơn khoảng 25 %, nhất là màu đỏ và xanh lá. Nếu ảnh P3 bị mất profile, các con số bị đọc như sRGB và ảnh trông nhạt: đó chính là 13 % độ bão hoà bị mất mà chúng tôi đo được. Fotollection giữ nguyên profile khi xuất để in, và chuyển đúng sang sRGB khi xuất cho mạng xã hội.

Ảnh in cần bao nhiêu DPI?

DPI là số điểm ảnh trên mỗi inch giấy. Ở 300 DPI, ảnh in trông nét kể cả khi nhìn sát; 150 đến 200 DPI vẫn ổn khi cầm xem. Một ảnh 10 × 15 cm ở 300 DPI cần 1.800 × 1.200 điểm ảnh, nên ảnh từ điện thoại hay máy ảnh nào cũng đủ; phần gợi ý khổ in trong app cho biết mỗi ảnh in được to tới đâu.

Vì sao ảnh đăng Facebook trông xấu đi?

Facebook thu mọi ảnh về tối đa 2.048 px, nén lại ở chất lượng thấp hơn với độ phân giải màu giảm một nửa, và bỏ colour profile. Ảnh gửi lên quá to sẽ bị thu nhỏ hai lần, một lần bởi bạn và một lần bởi Facebook. Gửi sẵn ảnh 2.048 px, sRGB và đã làm nét nhẹ thì Facebook chỉ nén lại một lần, và màu đã đúng từ trước.

Tự chạy lại các phép đo

Mọi phép đo đều chạy lại được trên ảnh của chính bạn. Script không bao giờ tải ảnh lên hay sao chép ảnh; chỉ giữ lại các con số. Bảng đầy đủ, kèm từng lần chạy, nằm trong RESULT.md.

bench/run.sh ~/Pictures/some-folder 3
uv run bench/quality/audit.py ~/Pictures/some-folder /tmp/out
uv run bench/quality/share_audit.py ~/Pictures/some-folder /tmp/share

Đọc RESULT.md trên GitHub Về trang chủ