2013-03-05 10 views
16

Retina Displayについて多くの質問がありましたが、回答はサーバ側にありませんでした。サーバ側で網膜(HD)ディスプレイを検出する

は、私は(PHPで)画面、元に応じて異なる画像をお届けしたいと思い

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

は、あなたがこれに対処する方法を見ることができますか?

私はJavaScriptでテストを想像するだけで、Cookieを設定します。しかし、これを設定するためには最初の交換が必要です。誰もがより良い解決策を持っていますか?

クッキー設定コード:

(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要求に、ユーザーの画面解像度またはDPIを評価するのに十分な情報が含まれているとは思われません。私はちょうどチェックした。 –

+0

あなたのソリューションを使用してください - より良い1つを想像してください – Philipp

+0

査読者は、例のためにWordPressの質問だと思った、私は例の機能を変更しました。 – chriscatfr

答えて

17

今のところ、より良い方法はないようですが、JS、PHP、Cookiesを組み合わせた私のソリューションです。私は将来的に、より良い答えがあることを願っています

function.phpで
<?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 } ?> 

:私は、次のGLOBALを使用することができた後、次に

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

は、私は正確にどのようにわからないんだけど、このアウトを考え出すの純粋なPHPの方法は、ブラウザのバージョンと一部の機能を返すget_browserを使用することでしょう。これは、網膜上で実行されているかどうかにつながるいくつかの情報をMAYに導くことができるかもしれません。

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

また、あなたはあなたのデバイスについての事を教えてくれますどの$_SERVER['HTTP_USER_AGENT']で見ることができます。網膜を持つデバイスのリストが必要で、答えを得るために比較を行う必要があります。

JSで網膜の検出を行う方がおそらく簡単で簡単です。

6

何も指定していないのであなたはこれを必要としている正確なユースケースと私は実際にどのような解像度でクライアントがそれを望んでいるのかを知っているサーバーのユースケースを見ません(私の意見ではクライアントが決定すべきです)は私の提案です:

Retina.jsのように、またはsrcset属性を使用してください。<img src="low-res.jpg" srcset="medium-res.jpg 1.5x, high-res.jpg 2x">

この方法で、画像のブラウザキャッシュを活用することもできます。 2つの異なるイメージサイズのURLが1つあれば、これを行うことはできません。たとえ自動的に作成/更新された画像キャッシュがlast-modifiedまたはetagヘッダを使って動作しても。

+0

retina.jsとsrcsetの間の優先順位はどれですか?2013年の – rogerdpack

+1

srcsetが期待されていたか、または非常に新しいです。あなたは新しいRetinaコンピュータでさえ使用できませんでした。 2017年には今より良い選択です。 – chriscatfr

+0

javascriptなしで動作するので、私はsrcsetが好きです。また、どのimgタグを網膜画像で利用できるのか、どの画像を利用できないのかを制御できます。しかし、あなたがすべての画像の網膜画像を提供し、完全な互換性を望むなら、retina.jsのようなjavascriptの解決策があなたをより良くするでしょう。 – smurfy

関連する問題