2012-03-12 27 views
8

Tôi có một trang web di động lợi dụng jQuery Mobile, tuy nhiên hình ảnh, thẳng thắn, trông giống như crap trên iPhone 4/4S. Tôi giả định như vậy sẽ đi cho "iPad mới" khi nó có sẵn vào cuối tuần này.Cách thích hợp để xử lý hình ảnh web hi-res cho màn hình hi-res (chủ yếu là màn hình võng mạc iOS) là gì?

Tôi biết điều này có liên quan đến tỷ lệ pixel và/hoặc hình ảnh DPI (hoặc PPI hoặc bất kỳ thứ gì bạn muốn gọi ... không tham gia thảo luận về điều đó). Tôi chỉ đơn giản muốn biết phương pháp tốt nhất để phục vụ hình ảnh web có độ phân giải cao cho các màn hình võng mạc iOS này là gì.

Lúc đầu, tôi nghĩ thay đổi hình ảnh DPI (trong Photoshop) sẽ giải quyết được vấn đề. Tôi đã lấy một số hình ảnh mẫu và thu nhỏ chúng xuống đến chiều rộng 190px. Tôi đã lưu một hình ảnh ở 72 DPI và một hình ảnh khác ở 200 DPI. Điều này không có hiệu lực. Xem cho chính bạn (trên iPhone 4/4S): http://haxway.com/restest/1.html Ảnh dưới cùng của mỗi hình ảnh là 200 DPI. Sau đó, thay vì lưu hình ảnh có độ phân giải cao 200 DPI, tôi đã lưu nó ở 72 DPI một lần nữa nhưng lần này tôi tăng chiều rộng (lên 528px) sao cho khi thu nhỏ lại chiều rộng 190px, nó sẽ ở ~ 200 DPI. Điều này dường như làm thủ thuật: http://haxway.com/restest/2.html Nếu bạn xem nguồn, bạn có thể thấy tôi đang buộc chiều rộng/chiều cao trên thẻ hình ảnh (<img src="w4.jpg" alt="" width="190" height="143">).

Tuy nhiên, tôi không tin đây là giải pháp tốt nhất. Không sử dụng các thuộc tính chiều rộng/chiều cao để mở rộng ảnh hưởng đến hiệu suất hình ảnh khi thiết bị phải mở rộng hình ảnh thay vì chỉ tải nó (và không chạm vào nó nữa)? Sau khi một số nghiên cứu, có vẻ như có một số truy vấn phương tiện CSS như -webkit-min-device-pixel-ratio [1] nơi bạn có thể sử dụng CSS khác nhau cho màn hình có độ phân giải cao và do đó tải hình ảnh có độ phân giải cao hơn trong CSS. Nhưng tôi cần nhắm mục tiêu các thẻ HTML <img>. Một bài báo khác tôi đọc (xin lỗi đã mất liên kết) đề xuất sử dụng Javascript để hoán đổi hình ảnh "thông thường" với hình ảnh có độ phân giải cao. Điều đó nghe có vẻ điên rồ!

Có cách nào tốt hơn để thực hiện việc này không? Tôi nhận ra ý kiến ​​có thể khác nhau về cách nào là "tốt nhất". Nếu các ưu/nhược điểm của mỗi phương pháp có thể được giải thích, điều đó sẽ rất tuyệt vời! Mục tiêu của tôi là sử dụng bất kỳ phương thức nào ám chỉ nhanh nhất (hy vọng không sử dụng một số Javascript bị hack, v.v.).

Cảm ơn!

[1] http://aralbalkan.com/3331

+0

Mẫu của bạn hơi cá. Những gì trình duyệt làm, hiển thị hình ảnh pixel theo pixel. Được xem như vậy, hình ảnh của bạn giống nhau. Kích thước in của hình ảnh 200dpi chỉ nhỏ hơn một chút. Thay vào đó, nếu bạn tải lên cùng một hình ảnh ở độ phân giải cao hơn - chứa nhiều pixel hơn - bạn sẽ thấy các trình duyệt hiển thị hình ảnh lớn gấp 3 lần. Mà cũng không phải là những gì bạn muốn. – commonpike

+0

... chính xác. Đó không phải là điều tôi muốn. Vậy làm thế nào đây là cách tiếp cận hiện tại "cá"? (Không có nghĩa là để tấn công ... chỉ tò mò.) –

+0

xin lỗi nếu điều đó nghe có vẻ xúc phạm. Nó gây nhầm lẫn cho tôi: những gì bạn muốn, tôi giả định, là cùng một hình ảnh kích thước ở độ phân giải cao hơn. Nhưng thay vào đó, bạn đã tải lên hình ảnh nhỏ hơn ở độ phân giải cao hơn. Nếu trình duyệt * sẽ * tôn trọng dpi, các hình ảnh 200dpi bạn đã tải lên sẽ nhỏ hơn nhiều. (trong cả hai trường hợp, cảm ơn các hình ảnh thử nghiệm - bạn đã giúp tôi). – commonpike

Trả lời

1

Bạn sẽ cần phải chạy một số hình thức js như giải pháp. Một trong những lựa chọn để sử dụng tại thời điểm này là một bởi mat wilcox. Nó sẽ phục vụ hình ảnh phù hợp với màn hình. Điểm cộng lớn cho giải pháp này là nó lưu trữ hình ảnh để giảm tải trên người dùng.

http://adaptive-images.com/

Có một đẩy để mang lại một yếu tố hình ảnh html mới có thể mất vài nguồn để khắc phục vấn đề này, nhưng đó là một con đường tắt nào.

http://www.w3.org/community/respimg/

+1

Đây là một lợi thế so với việc luôn phục vụ hình ảnh có độ phân giải cao với các thuộc tính 'width' và' height' được đặt trong thẻ '' (giống như ví dụ thứ hai của tôi)? Một thiết bị không có màn hình "hi-res" sẽ vẫn hiển thị hình ảnh tốt. Tôi hiểu nó sẽ bảo tồn băng thông, nhưng bất cứ điều gì khác? Tôi cảm thấy như một giải pháp Javascript sẽ chậm hơn vì nó có khả năng chạy sau khi tài liệu đã sẵn sàng, vv Caching không phải là một vấn đề vì tôi luôn có thể đặt tiêu đề hết hạn một cách thích hợp. Tôi không có ý định tấn công giải pháp này, tôi chỉ muốn biết tất cả các chi phí/lợi ích. Cảm ơn! –

0

Đối với thẻ hình ảnh, tôi nghĩ bạn đã đưa ra giải pháp của riêng bạn. Lợi ích lớn nhất là gửi một hình ảnh và cùng một hình ảnh cho tất cả khách hàng.

Đối với hình ảnh css, bạn có thể làm tương tự không? Hãy quên đi những clunky -webkit-min-device-pixel-ratio mà sẽ yêu cầu một hình ảnh khác nhau mỗi khi họ nấu một thiết bị mới. Chỉ cần gửi hình ảnh lớn nhất và sử dụng CSS2's background-size để giảm kích thước. Tôi havent thử nghiệm này. IE < 9 sẽ cung cấp cho bạn một vấn đề.

Tôi, có thể bạn, choáng váng html/css không cung cấp phương pháp thích hợp để thực hiện việc này, chỉ có cách giải quyết như vậy. Tôi cũng giống như bạn, nhầm lẫn là lý do tại sao trình duyệt không chỉ tuân thủ thông tin hình ảnh DPI. Nếu có ai biết, bình luận được đánh giá cao.

Có cách nào tốt hơn để thực hiện việc này không?

Có, tránh sử dụng hình ảnh bitmap. Sử dụng SVG.

+0

Tôi đồng ý SVG sẽ là một giải pháp tốt hơn, tuy nhiên hỗ trợ trình duyệt và hiệu suất là kém tại thời điểm này. =/ –

+0

để làm mọi thứ tồi tệ hơn, ipad2 nổi tiếng là xấu ở hình ảnh thu nhỏ. chúng trở nên lởm chởm. những gì tôi và khách hàng của tôi đã đến với điều khoản, là sử dụng 132dpi cho tất cả các hình ảnh, nội tuyến và nền. của nó khá chấp nhận được trên màn hình võng mạc và không quá lớn để tải về một trong hai. – commonpike

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