2013-03-05 8 views
16

मुझे रेटिना डिस्प्ले के बारे में कई प्रश्न मिले, लेकिन सर्वर के पक्ष में कोई भी जवाब नहीं था।सर्वर पक्ष पर रेटिना (एचडी) डिस्प्ले का पता लगाएं

मैं (PHP में) स्क्रीन, पूर्व के अनुसार एक अलग छवि देने के लिए करना चाहते हैं:

if($is_retina) 
    $thumbnail = get_image($item_photo, 'thumbnail_retina') ; 
else 
    $thumbnail = get_image($item_photo, 'thumbnail') ; 

आप इस के साथ काम करने का एक तरीका देख सकते हैं?

मैं केवल कुकी सेट करने, जावास्क्रिप्ट में एक परीक्षण की कल्पना कर सकता हूं। हालांकि इसे सेट करने के लिए प्रारंभिक विनिमय की आवश्यकता है। किसी के पास बेहतर समाधान है?

कुकी सेटिंग कोड:

(function(){ 
    if(document.cookie.indexOf('device_pixel_ratio') == -1 
     && 'devicePixelRatio' in window 
     && window.devicePixelRatio == 2){ 

    document.cookie = 'device_pixel_ratio=' + window.devicePixelRatio + ';'; 
    window.location.reload(); 
    } 
})(); 
+0

मुझे नहीं लगता कि HTTP अनुरोध में उपयोगकर्ता के स्क्रीन रिज़ॉल्यूशन या डीपीआई का आकलन करने के लिए पर्याप्त जानकारी है। मैंने अभी जांच की है। –

+0

अपने समाधान का उपयोग करें - एक बेहतर कल्पना नहीं कर सकते – Philipp

+0

समीक्षकों ने सोचा कि यह उदाहरण के कारण एक WordPress प्रश्न था, मैंने उदाहरण समारोह बदल दिया। – chriscatfr

उत्तर

17

ठीक है क्योंकि ऐसा लगता है कि इस पल के लिए कोई बेहतर तरीका नहीं है, यहां मेरा समाधान जेएस, पीएचपी और कुकीज़ का संयोजन है।

मुझे आशा है कि भविष्य में बेहतर जवाब होगा

<?php 
    if(isset($_COOKIE["device_pixel_ratio"])){ 
     $is_retina = ($_COOKIE["device_pixel_ratio"] >= 2); 

     if($is_retina) 
      $thumbnail = get_image($item_photo, 'thumbnail_retina') ; 
     else 
      $thumbnail = get_image($item_photo, 'thumbnail') ; 

    }else{ 
?> 
<script language="javascript"> 
(function(){ 
    if(document.cookie.indexOf('device_pixel_ratio') == -1 
     && 'devicePixelRatio' in window 
     && window.devicePixelRatio == 2){ 

    var date = new Date(); 
    date.setTime(date.getTime() + 3600000); 

    document.cookie = 'device_pixel_ratio=' + window.devicePixelRatio + ';' + ' expires=' + date.toUTCString() +'; path=/'; 
    //if cookies are not blocked, reload the page 
    if(document.cookie.indexOf('device_pixel_ratio') != -1) { 
     window.location.reload(); 
    } 
    } 
})(); 
</script> 
<?php } ?> 
function.php में

:

add_action('init', 'CJG_retina'); 

function CJG_retina(){ 

    global $is_retina; 
    $is_retina = isset($_COOKIE["device_pixel_ratio"]) AND $_COOKIE["device_pixel_ratio"] >= 2; 
} 

तब के बाद मैं ग्लोबल निम्न का उपयोग कर सकते हैं:

global $is_retina; या $GLOBALS['is_retina'];

+0

वाह, यह अच्छा है! –

1

मैं वास्तव में कैसे यकीन नहीं है, लेकिन यह पता लगाना की शुद्ध पीएचपी रास्ता get_browser जो ब्राउज़र संस्करण और कुछ क्षमताओं रिटर्न का उपयोग करेंगे। यह आपको कुछ जानकारी बताने में सक्षम हो सकता है कि मई यह है कि यह रेटिना पर चल रहा है या नहीं।

http://php.net/manual/en/function.get-browser.php

साथ ही, आपको $_SERVER['HTTP_USER_AGENT'] देख सकते हैं जो आप डिवाइस के बारे में बातें बता देंगे। तो आपको उन उपकरणों की एक सूची की आवश्यकता है जिनके पास रेटिना है और उत्तर पाने के लिए तुलना करें।

जेएस में अपना रेटिना पहचान करना संभवतः अधिक आसान और मूर्खतापूर्ण है।

6

जैसा कि आप निर्दिष्ट नहीं करते हैं सटीक उपयोग-मामले की आपको इसकी आवश्यकता है और मुझे वास्तव में सर्वर के लिए उपयोग-केस नहीं दिख रहा है, यह जानने के लिए कि ग्राहक किस छवि में अपनी छवियों को चाहता है (क्लाइंट में निर्णय लेना चाहिए) यहां मेरा सुझाव है:

कुछ उपयोग करें Retina.js की तरह या srcset विशेषता <img src="low-res.jpg" srcset="medium-res.jpg 1.5x, high-res.jpg 2x">

इस तरह आप छवियों के ब्राउज़र कैशिंग का लाभ उठा सकते हैं। यदि आप दो अलग-अलग छवि आकारों के लिए एक यूआरएल रखते हैं तो आप नहीं कर सकते हैं। यहां तक ​​कि यदि यह स्वचालित रूप से निर्मित/अपडेट की गई छवि कैशिंग अंतिम-संशोधित या इटैग हेडर का उपयोग करके काम करता है।

+0

retina.js और srcset के बीच कोई वरीयता यहाँ?2013 स्रोतसेट में – rogerdpack

+1

की उम्मीद थी या बहुत नया। आप नए रेटिना कंप्यूटरों पर भी इसका इस्तेमाल नहीं कर सके। अब 2017 में यह एक बेहतर विकल्प है। – chriscatfr

+0

मैं srcset पसंद करता हूं, क्योंकि यह जावास्क्रिप्ट के बिना काम करता है। इसके अलावा आप नियंत्रित कर सकते हैं कि आप कौन सी आईएमजी टैग रेटिना छवि के साथ उपलब्ध होना चाहते हैं और कौन सी छवि उपलब्ध नहीं है। लेकिन अगर आप सभी छवियों के लिए रेटिना छवि प्रदान करते हैं और पूर्ण संगतता चाहते हैं तो रेटिना.जेएस जैसे जावास्क्रिप्ट समाधान आपको बेहतर सेवा प्रदान करेंगे। – smurfy

संबंधित मुद्दे