2010-02-12 30 views
7

任何人都可以想到一種方法,我可以發現每英寸的用戶像素?我想確保一個圖像顯示在網頁瀏覽器正好我需要它的大小,所以使用分辨率(我可以從用戶代理得到)和每英寸像素的組合我可以做到這一點。我怎樣才能找出每英寸的網頁查看器像素?

但是,我不確定是否有任何方法可以發現每英寸的用戶像素,理想情況下使用JavaScript或其他非侵入式方法。

有什麼建議嗎?

感謝,

CJ

+5

可能很難。我從未在我的生活中使用過一臺電腦,其中DPI被設置爲屏幕的正確實際DPI。當然,如果你的特定觀衆通常確實有它的話,那就沒問題。 – 2010-02-17 16:17:23

+0

@Bart:我有,但是我自己設置它們(並且使用Linux,它比Windows更能夠應付事實) – 2010-02-17 16:23:51

+0

我認爲標尺的想法是最有希望的,儘管對於用戶來說有點痛苦,如果他們正在查看很多圖像,您可以在第一次顯示標尺並保持其設置。 也許你可以添加到你的問題爲什麼你需要這個。 – PeteT 2010-02-23 16:30:02

回答

6

您可以使用JavaScript函數來獲取DPI以下。

<script type="text/javascript"> 
    var dpi = { 
     v: 0, 
     get: function (noCache) { 
     if (noCache || dpi.v == 0) { 
      e = document.body.appendChild(document.createElement('DIV')); 
      e.style.width = '1in'; 
      e.style.padding = '0'; 
      dpi.v = e.offsetWidth; 
      e.parentNode.removeChild(e); 
     } 
     return dpi.v; 
     } 
    } 

    alert(dpi.get(true)); // recalculate 
    alert(dpi.get(false)); // use cached value 
</script> 

然而,我認爲它會一直在windows機器上返回96

據我所知,操作系統無法確定視口的實際物理尺寸,所以很可能它是法案軟件不可能知道現實生活中的DPI。

但是,專業人員是某些分支機構確保屏幕上的DPI與現實生活中的DPI相匹配。在這種情況下,上面的javascript可能就足夠了。

注:
測試在Opera 9上面的代碼中,IE6 & 7和在WinXP和Win2k的火狐3.6。

更新:
增加了noCache參數。但我懷疑它會有什麼影響。我在上面提到的Windows版本中對FireFox和Opera進行了放大測試,並且他們一直將DPI引用爲'96',而與變焦量無關。看到什麼是移動設備將會很有趣。

+1

根據以下有關移動瀏覽器的原始海報評論: 請記住,手機瀏覽器允許用戶放大和縮小,因此DPI將是一個非常動態的值。緩存爲DPI計算的值可能沒有意義。 – Dancrumb 2010-02-22 21:09:00

+0

@Dancrumb:這也適用於桌面瀏覽器。許多新的瀏覽器版本都具有縮放功能。歌劇對此很早,現在其他人也跟着。 – awe 2010-02-23 11:17:20

+0

謝謝丹我會做一些測試,我希望這樣的事情可能:) – 2010-02-23 17:18:02

0

Displays today support 96px/inch or 72pixels/inch

你可以得到HTTP請求的User-Agent頭

User-Agent: Mozilla/5.0 (Linux; X11) 

這個人會告訴你的操作系統,從這裏你可以做出決定。

+0

我是也考慮到手機瀏覽器,而這些都有更高的水平和更多不同的像素/英寸範圍,因此我想知道是否有任何程序化的方式來做到這一點。 – 2010-02-17 16:00:26

+0

他們已經假裝標準化了,但實際的顯示效果可能會有所不同 - 例如,我的上網本的真實DPI約爲170,而我的臺式機工作在約90。想一想:當你用同樣的分辨率同時獲得17「和19」顯示器時,實際的DPI不可能是相同的:)。 – 2010-02-17 16:22:51

0

這可能是非常艱難的 - 即使您以某種方式設法根據dpi縮放渲染圖像,您如何防止用戶直接在瀏覽器中縮放圖像?

您是否考慮過一些豐富的接口技術,如flash或Silverlight?他們可能會給你額外的選擇。

+0

你知道閃光燈能否提供我需要的信息嗎? – 2010-02-19 17:45:49

+1

我很確定flash不能:(:。 – 2010-02-19 18:07:03

5

你可以像老的繪圖軟件那樣做,並顯示一個可伸縮的標尺。讓用戶拖動虛擬標尺,直到它與他們放在屏幕上的物理標尺相匹配。

不是一個嚴肅的建議在生產中使用,但也許只有這樣,才能真正得到正確的答案:(。

+0

謝謝你,我會記住:) – 2010-02-19 17:44:36

+1

我認爲這是唯一的方法,將實際工作。但這不是很實際。 – Jacco 2010-02-22 17:09:35

1

最安全和最簡單的方法就是告訴瀏覽器你想要圖像的大小。 CSS支持英寸和指標,因此您可以像以下任何示例一樣指定圖像:

<img src="image.png" style="width:15cm;height:10cm;" alt="Centimeters" /> 
<img src="image.png" style="width:5.9in;height:3.9in;" alt="Inches" /> 
<img src="image.png" style="width:150mm;height:100mm;" alt="Millimeters" /> 
+0

我剛剛在firefox上試過這個窗口,雖然這些單元是有效的,但它們看起來並不正確。在我的顯示器上,它實際上大約是1.5釐米= 1釐米。我不知道在其他瀏覽器中會是什麼樣子。 – PeteT 2010-02-23 16:24:36

+0

這根本不起作用。瀏覽器將爲此使用操作系統的默認dpi。 – Jacco 2010-02-23 16:42:18

+0

感謝您的興趣和測試的想法 - v。對我有幫助,真正的恥辱東西,簡單直觀的不起作用:(謝謝你的想法,雖然! – 2010-02-23 17:17:20