2012-02-17 31 views
6

Thông thường khi một hình ảnh vào trang web của tôi, tôi lưu nó dưới dạng jpg bằng thư viện hình ảnh tôi đã viết với chất lượng mặc định là 80%. Bây giờ khi tôi cần phải thực hiện một số thao tác khác trên nó (như cắt xén, hoặc thậm chí chỉ thay đổi kích thước) hình ảnh sẽ được mở dưới dạng jpg, được xử lý, sau đó được lưu lại. Tuy nhiên, nếu nó đã được nén trước khi tôi không muốn nén nó một lần nữa hoặc người nào khác mỗi khi tôi cần phải làm một hoạt động chất lượng sẽ giảm.Phát hiện tỷ lệ nén JPG?

Có cách nào để tôi có thể phát hiện số lượng ảnh đã được nén trước đó (so với phiên bản png của nó) bằng các công cụ trong thư viện chuẩn GD php? Tôi biết rằng các công cụ phát hiện nơi một hình ảnh được Photoshopped làm như vậy bằng cách so sánh số lượng nén tương đối vì vậy tôi nghĩ rằng có thể phát hiện số lượng nén nhưng có ai biết cách tôi sẽ thực hiện tính toán này không? Cảm ơn.

+0

cho những gì tôi biết, bạn không thể có được tỷ lệ chất lượng từ tệp jpg –

+1

Tôi biết rằng nó không được lưu trong dữ liệu meta của chính tệp đó, nhưng có thể có cách nào đó để tính toán số này – hackartist

+0

No. .. –

Trả lời

8

Bạn không thể nhận được giá trị chất lượng từ JPG. Hơn nữa, giá trị chất lượng phụ thuộc vào bộ mã hóa. Nó không phải là một tiêu chuẩn hay bất cứ điều gì như thế này. Một số chương trình chỉ có (thấp, trung bình, cao), trong khoảng 20 chương trình có thể tốt hơn 90.

Thứ hai, JPG đơn giản sẽ mất chất lượng trong mỗi mã hóa cosnequent, ngay cả khi bạn lưu nó ở chất lượng tốt nhất. Sự thật đáng buồn của cuộc sống :) Các hoạt động duy nhất mà không tồi tệ hơn chất lượng là flips và luân phiên (và cây trồng, nếu chúng được liên kết với kích thước khối JPEG).

Quy tắc của ngón tay cái: Mã hóa nó mỗi lần có cùng giá trị chất lượng. Ví dụ: Nếu bạn lưu nó một lần ở mức 60, thì không có lợi nhuận nếu bạn lưu nó ở mức 80 lần sau. Chỉ kích thước tệp lớn hơn.

Ngoài ra, hãy thử giảm số lượng mã hóa lại đó và thực hiện từng thao tác trên bản gốc, nếu bạn có đủ bộ nhớ.

+0

Đã cập nhật câu trả lời. –

1

Bạn sẽ phải lưu trữ chất lượng của hình ảnh trong cơ sở dữ liệu để bạn có thể biết liệu nó đã được nén hay chưa.

+0

Thậm chí sau đó nếu anh ta thay đổi kích thước hình ảnh, chất lượng sẽ giảm xuống. Tiết kiệm điều đó là vô nghĩa. Nhưng, suy nghĩ tốt, do đó có +1. –

+0

@RokKralj Tôi đề nghị tiết kiệm để anh ta không nén nó nhiều hơn một lần. Anh ta có thể làm hỏng hình ảnh hơn nữa .. – ppp

+0

Bạn không hiểu mọi thứ. Không có "nén", nó chỉ tiết kiệm ở giá trị chất lượng. Nếu bạn có nghĩa là anh ta tiết kiệm nó một lần ở tuổi 80, thì hãy nhớ rằng, để anh ta có thể cứu nó ở mức 100 vào lần sau ...? Điều đó sẽ chỉ làm tăng kích thước tập tin mà không đạt được chất lượng. 80 -> 80 -> 80 là tiết kiệm chính xác. –

1

Để tránh nén hình ảnh nhiều lần, bạn có thể chỉ cần so sánh kích thước tệp của thay đổi kích thước với ảnh gốc.

  • Nếu kích thước tệp lớn hơn đáng kể thì bạn đã tăng tỷ lệ, vì vậy đừng sử dụng.
  • Nếu nó thấp hơn đáng kể so với mức đã nén, hãy sử dụng nó.

Ngoài ra, khi nén tệp có cùng tốc độ chỉ cạo một lượng nhỏ kích thước tệp, nếu bạn sử dụng số tròn cho tỷ lệ của mình (60%, 70%, 80% v.v.), bạn có thể xác định tỷ lệ nếu kích thước tập tin thay đổi kích thước là rất tương tự như của bản gốc.

Ví dụ: nén một tệp 1,844 KB tại:
- 90% = 2,115 KB. Kích thước tăng lên, vì vậy tôi sẽ không sử dụng nó.
- 80% = 1,843 KB. Điều này gần giống với kích thước tệp gốc nên tôi có thể giả định rằng tệp gốc có tỷ lệ 80%.
- 70% = 1,567 KB. Điều này đã nén, vì vậy tôi sẽ sử dụng nó.

Cuối cùng, nếu bạn chỉ quan tâm đến tỷ lệ hình ảnh bạn đã tự nén, thì bạn có thể sử dụng PHP để lưu tỷ lệ bạn sử dụng trong siêu dữ liệu của tệp.

Các vấn đề liên quan