2017-02-16 2 views
-1

그래서 브라우저에서 "이미지보기"를 사용하는 것과 같은 http 페이지로 이미지를 표시하려고합니다. 나는 이걸 가지고 있고 파이어 폭스가 내 빌어 먹을 이미지 데이터를 읽으려면 뭘해야하는지 잘 모른다. (이 문자열은 $ 이미지 내에 포함되어 문자열 해시 된 이미지 전에 ", base64로; 문자셋 = 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를 추가했습니다. 대신 base64를 지정하기 위해 Content-Transer-Encoding을 사용했을 것입니다. 또한, 귀하의 이미지는 이미 파일의 base64에 있습니까? 그렇지 않은 경우 문제가 발생할 수 있습니다. –

답변

1

HTTP는 페이로드를 2 진수로 올바르게 전달합니다. base64를 사용할 방법이 없으며 필요도 없습니다.

+0

어떤 경우이든 이미지를 표시하려면 , 나는 그것을 해독해야만 하는가? – user4654137

+0

처음부터 인코딩해서는 안됩니다. – DaSourcerer

+0

CSS가 이미지를이 형식으로 유지할 수 있어야하므로 ** ** 또는 ** background- image : ** 그러면 firefox (또는 일반 브라우저)가 한 번만 다운로드하여 캐시합니다. 또한 DB에서 이미지를이 형식으로로드하는 것이 더 빠를 경우 벤치마킹을 시도합니다. 얼룩 (정상적인 이미지)으로, 또는 fs 자체에서. – user4654137

-1
my $image = <$fh>; 

권장하지 않습니다. 바이너리 읽기를 사용하십시오.

content-transfer-encoding 헤더를 추가하면 base64 또는 바이너리를 보낼 수 있습니다. I/O 캐싱 ($|)을 해제하거나 이상한 일이 발생할 수 있습니다. local를 사용하는 점은 변수의 이전 값이 때 자동으로 포함하는 블록의 끝을 복원 있다는 것을

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

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

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

참고 :

+1

HTTP에는 "content-transfer-encoding"헤더 필드가 없습니다. –

+0

base64 인코딩 이미지에서 binmode를 사용 하시겠습니까? 나는 그것이 단지 텍스트라고 생각했다? – user4654137

1

배니 쉬의 프로젝트에서 64 기수, 그리고 스크립트의 최소한의 버전을한다. 블록에 넣지 않고 수동으로 기본값을 복원하면 local이 처리하지 않습니다.

심지어이 충분해야한다 :

print "Content-Type: image/png\n\n"; 
exec 'cat', '/where/the/img/is'; 
관련 문제