2017-02-16 32 views
-1

Итак, я пытаюсь отобразить изображение с http-страницей, подобной тем, которые вы получаете с помощью «Просмотр изображения» в вашем браузере. Я получил это далеко, и я понятия не имею, что еще мне нужно сделать, чтобы заставить Firefox читать мои проклятые данные изображения.Заголовки, необходимые для отображения изображения base64 с Perl?

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; 

Считайте, что я попытался с и без "данных: our_data_type; Charset = UTF-8; base64," строки перед хэшированным изображением (Эта строка содержится в $ изображений переменная).

+2

Является ли это CGI скрипт? Нет необходимости в base64 ответе HTTP, который является образом. Просто отправьте изображение! Если вы отправляете PNG напрямую в ответ на HTTP-запрос (а не встраиваете его в некоторый HTML в тот же ответ), то схема 'data:' URI не имеет значения. –

+0

Имеет ли '$ image' данные сырого изображения? Затем вам нужно будет закодировать Base64 перед его выходом. – mob

+1

Я не эксперт, но я никогда не видел твоей нотации для Content-Type с добавлением base64. Вместо этого я бы использовал Content-Transer-Encoding, чтобы указать base64. Кроме того, ваше изображение уже находится в файле base64 в файле? Если нет, у вас, вероятно, будут проблемы. –

ответ

1

HTTP передает полезную нагрузку в виде двоичного кода. Нельзя использовать base64, и нет необходимости в нем.

+0

Итак, в любом случае, чтобы отобразить его , Я должен его декодировать? – user4654137

+0

Вы не должны были кодировать его в первую очередь. – DaSourcerer

+0

Я пытаюсь это из-за того, что css должен иметь возможность удерживать изображения в этом формате, я не уверен, добавляю ли я то же изображение, но не закодировано, с ** ** или с ** background- image: **, а затем firefox (или любой общий браузер) будет загружать его только один раз и кэшировать его. Также пытайтесь проверить, будет ли быстрее загружать изображения в этом формате из БД; как нормальный образ) или из самой fs. – user4654137

-1
my $image = <$fh>; 

Я не рекомендую это. Используйте двоичное чтение.

Добавить заголовок content-transfer-encoding, и вы можете отправить base64 или двоичный код. Отключить кеширование ввода/вывода ($|) или странные вещи могут произойти.

+1

В HTTP-заголовке нет поля заголовка «передача содержимого». –

+0

включение binmode в кодировке base64? Я думал, что это просто текст? – 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'; 

 Смежные вопросы

  • Нет связанных вопросов^_^