2008-08-30 182 views
52

我正在爲Firefox/IE構建一個開放式搜索插件,並且該圖像需要Base64編碼,因此我如何基於64編碼我的圖標?Base64編碼圖像

我只熟悉PHP

回答

74

據我記得有一個XML元素的圖像數據。你可以使用這個website來編碼一個文件(使用上傳字段)。然後,將數據複製並粘貼到XML元素。創建OpenSearch的插件

<?php 
     $im = file_get_contents('filename.gif'); 
     $imdata = base64_encode($im);  
?> 

使用Mozilla's guide求助:

你也可以使用PHP來做到這一點,像這樣。例如,圖標元素是這樣使用的:

<img width="16" height="16">data:image/x-icon;base64,imageData</> 

其中imageData是你的base64數據。

+1

在這種情況下,base64_encode只會編碼圖像的「資源句柄」,我相信,如果有的話。您需要閱讀文件的實際內容。不過,使用base64編碼器網站應該可以工作。 – 2008-11-26 18:19:21

+1

這根本不適用於我。 `$ im`是一個`resource`,我收到一個錯誤`base64_encode()期望參數1是字符串,給出的資源「 – 2012-04-11 23:08:37

0

谷歌使我this溶液(BASE64_ENCODE)。希望這可以幫助!

+1

是的,我知道如何編碼,但如何得到公正的圖像數據在那裏它被編碼。 – UnkwnTech 2008-08-30 11:07:22

8

我的rfc2397簡介是:

一旦你得到了你的base64編碼的圖像數據,把它與「data:{mimetype};base64,」,這是類似於做的前綴爲前綴的<圖像> < /圖像>標記中括號中的url()定義在CSS中或在[X] HTML中img標記的src屬性的引用值中。您可以通過將data:image/...行放入URL字段並按下回車來測試Firefox中的數據url,它應該顯示您的圖像。

對於實際的編碼,我認爲我們需要遍歷所有的選項,而不僅僅是PHP, ,因爲base64有很多種編碼方式。

  1. 使用base64命令行工具。它是GNU coreutils(v6 +)的一部分,幾乎默認在任何地方安裝,但不是我試過的BSD。問題:$ base64 imagefile.ico > imagefile.base64.txt
  2. 使用工具,功能的選項轉換爲Base64,像Notepad++下設有插件 - > MIME工具 - > Base64編碼的功能
  3. 電子郵件發送給自己的文件,並查看原始郵件內容,複製及糊。使用webform

的MIME類型的說明: 我寧願你使用的image/pngimage/jpegimage/gif一個,因爲我can't find流行image/x-icon。應該是image/vnd.microsoft.icon? 另外其他格式要短得多。

比較265個字節VS 1150個字節:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAVFBMVEWcZjTcViTMuqT8/vzcYjTkhhTkljT87tz03sRkZmS8mnT03tT89vTsvoTk1sz86uTkekzkjmzkwpT01rTsmnzsplTUwqz89uy0jmzsrmTknkT0zqT3X4fRAAAAbklEQVR4XnXOVw6FIBBAUafQsZfX9r/PB8JoTPT+QE4o01AtMoS8HkALcH8BGmGIAvaXLw0wCqxKz0Q9w1LBfFSiJBzljVerlbYhlBO4dZHM/F3llybncbIC6N+70Q7OlUm7DdO+gKs9gyRwdgd/LOcGXHzLN5gAAAAASUVORK5CYII= 

data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAD/////ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv///////////2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb///////////9mZmb/ZmZm//////////////////////////////////////////////////////9mZmb/ZmZm////////////ZmZm/2ZmZv//////ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv//////ZmZm/2ZmZv///////////2ZmZv9mZmb//////2ZmZv9mZmb/ZmZm/2ZmZv9mZmb/ZmZm/2ZmZv9mZmb//////2ZmZv9mZmb///////////9mZmb/ZmZm////////////////////////////8fX4/8nW5P+twtb/oLjP//////9mZmb/ZmZm////////////////////////////oLjP/3eZu/9pj7T/M2aZ/zNmmf8zZpn/M2aZ/zNmmf///////////////////////////////////////////zNmmf8zZpn/M2aZ/zNmmf8zZpn/d5m7/6C4z/+WwuH/wN/3//////////////////////////////////////+guM//rcLW/8nW5P/x9fj//////9/v+/+w1/X/QZ7m/1Cm6P//////////////////////////////////////////////////////7/f9/4C+7v8xluT/EYbg/zGW5P/A3/f/0933/9Pd9//////////////////////////////////f7/v/YK7q/xGG4P8RhuD/MZbk/7DX9f//////4uj6/zJh2/8yYdv/8PT8////////////////////////////UKbo/xGG4P8xluT/sNf1////////////4uj6/zJh2/8jVtj/e5ro/////////////////////////////////8Df9/+gz/P/////////////////8PT8/0944P8jVtj/bI7l/////////////////////////////////////////////////////////////////2yO5f8jVtj/T3jg//D0/P///////////////////////////////////////////////////////////3ua6P8jVtj/MmHb/+Lo+v////////////////////////////////////////////////////////////D0/P8yYdv/I1bY/9Pd9///////////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA== 
10
$encoded_data = base64_encode(file_get_contents('path-to-your-image.jpg'));  
6

檢查下面的例子

<?php 
    // First get your image 
    $image = 'path-to-your-picture/image.jpg'; 
    $picture = base64_encode(file_get_contents($image)); 
    echo '<img width="100" height="100" src="data:image/jpg;base64,'. $picture .'" />' 
    ?>