2017-02-16 8 views
-1

ブラウザで「画像の表示」を取得したようなhttpページで画像を表示しようとしています。私はこれを遠くに持っていて、Firefoxに自分の画像データを読み込ませるために他に何をしなければならないか分からない。 (この文字列は、$画像内に含まれているハッシュ画像前列: "BASE64、;のcharset = UTF-8 our_data_typeデータ" Perlでbase64イメージを表示するためにヘッダーが必要ですか?

私はで及びなしの両方の試みを考える

open (my $fh, "<", "/where/the/base64_encoded_img/is"); 
local $/= undef; 
my $image = <$fh>; 
close $fh; 
local $/= "\n"; 

use MIME::Base64; 
my $alpha; 
$alpha .= "Content-type: image/png;base64 \n"; #our image is a PNG 
$alpha .= "Content-length: " . MIME::Base64::encoded_base64_length($image) . " \n\n "; 
$alpha .= " "; 
#~ $alpha .= "<img src='$image'/>"; 
$alpha .= "$image"; 
print $alpha; 
変数)。

+2

これはCGIスクリプトですか?イメージであるHTTPレスポンスをbase64にする必要はありません。ちょうどイメージを送る! HTTPリクエストに応じてPNGを直接送信する場合(同じレスポンスでHTMLに埋め込まない場合)、 'data:' URIスキームは無関係です。 –

+0

'$ image'に生画像データが含まれていますか?次に、出力する前にBase64エンコードする必要があります。 – mob

+1

私は専門家ではありませんが、Content-Typeの表記を見たことはありません。代わりに、Base64のものを指定するためにContent-Transer-Encodingを使用しました。また、あなたのイメージはファイルのbase64に既にありますか?そうでない場合は、おそらく問題があります。 –

答えて

1

HTTPはペイロードをバイナリとして正しく送信します。 base64を使用する方法はなく、その必要もありません。

+0

これを表示するには、私はそれをデコードする必要がありますか? – user4654137

+0

最初にエンコードしてはいけません。 – DaSourcerer

+0

私はこれを試しています。というのも、CSSはこの形式の画像を保持できるはずですから、** **または** background-withと同じ画像を追加しても、 image:**そしてfirefox(または一般的なブラウザ)はそれを一度ダウンロードしてキャッシュします。また、DBからこの形式のイメージを読み込む方が速いかどうかをベンチマークしようとします。ブロブ(通常の画像)として、またはfs自体から。 – user4654137

-1
my $image = <$fh>; 

私はこれをお勧めしません。バイナリ読み取りを使用します。

content-transfer-encodingヘッダーを追加すると、base64またはバイナリを送信できます。 I/Oキャッシング($|)をオフにするか、奇妙なことが起こる可能性があります。

+1

HTTPには「content-transfer-encoding」ヘッダーフィールドはありません。 –

+0

base64でエンコードされたイメージでbinmodeを有効にしますか?私はそれが単なるテキストだと思った? – user4654137

1
プロジェクトから

追放base64方式、およびスクリプトのこの最小限のバージョンを実行します。

open (my $fh, "<", "/where/the/img/is"); 

{ 
    local $/= undef; 
    my $image = <$fh>; 
    close $fh; 
} 

print "Content-Type: image/png\n\n"; 
print $image; 

localを使用してのポイントは含むブロックが終了したときに、変数の前の値が自動的に復元されていることであることを。ブロックに入れずに手動でデフォルト値に戻すと、localは何もしません。

これでも十分に良いことがあります:

print "Content-Type: image/png\n\n"; 
exec 'cat', '/where/the/img/is'; 
関連する問題