Intereting Posts
PHP preg_replace () – Проблемы с памятью. Альтернатива? Почта переходит к спаму вместо входящих и некоторых ошибок в заголовке части почты с помощью PHP PHP: Показать диалог подтверждения да / нет Перетаскивание столбцов PHP, JS, как это можно сделать? Любой файл .php, вызывающий ОШИБКУ ВНУТРЕННЕГО СЕРВЕРА CodeIgniter current_url не отображает строки запроса Пример PHP для PayPal Adaptive Payments ConvertCurrency API Загрузите csv из codeigniter mysql MySQL дата или время PHP? Как получить календарную неделю, чувствительную к году? дата («W») возвращает 52 на 1 января Не удается подключиться к пользователю базы данных mongodb с помощью php Предложить правильный подход для анализа недопустимого ответа xml с пространствами имен в этом случае Ошибка PHPExcel в CodeIgniter «Не удалось загрузить запрошенный класс: iofactory» FallbackResource работает для некоторых страниц, но не для других. Является ли MVC единственным способом писать PHP?

php: воссоздать и отобразить изображение из двоичных данных

Возможно ли воссоздать изображения из двоичных данных (обрабатывать их при необходимости) и отображать их, все в одном скрипте? Что-то вроде

// get and display image 1: $imagedata1 = file_get_contents('assets/test.png'); $imagedata1 = process_using_gd_or_something($imagedata1); echo "<img src={$imagedata1} >"; // <-- IS THIS (OR EQUIVALENT) POSSIBLE? // get and display image 2: //etc... 

Я хочу избежать хранения изображений на диск после обработки и получения их оттуда или с помощью внешнего скрипта …

Related of "php: воссоздать и отобразить изображение из двоичных данных"

Вы можете сделать это, используя URI данных в атрибуте src изображения.

Формат: data:[<MIME-type>][;charset="<encoding>"][;base64],<data>

Этот пример прямо со страницы Википедии по URI данных :

 <?php function data_uri($file, $mime) { $contents = file_get_contents($file); $base64 = base64_encode($contents); return ('data:' . $mime . ';base64,' . $base64); } ?> <img src="<?php echo data_uri('elephant.png','image/png'); ?>" alt="An elephant" /> 

Это действительно возможно с использованием встроенных изображений (называемых URI данных ).

Тэг изображения будет выглядеть примерно так:

 <img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/ /ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" width="16" height="14" alt="embedded folder icon"> 

Почему в основном это не очень хорошая идея:

  • Загрузка страницы будет замедляться, потому что изображение должно быть загружено до того, как полная структура HTML может быть загружена и, таким образом, отображена. Тем более, если вы выполняете дополнительные операции над изображением. Вероятно, ваш сайт будет намного медленнее, чем если бы это был внешний образ.

  • Встроенные изображения должны быть закодированы в base64, добавив 33% к их размеру .

Если вы говорите о разумном высоком трафике, общедоступном сайте, я бы рекомендовал вам хранить ваше изображение внешне и кэшировать их. Если это только для небольшого проекта, встроенные изображения могут работать для вас.

Попробуй это…

 $img=base64_encode($row['PICTURE']); <img alt="105x105" class="img-responsive" src="data:image/jpg;charset=utf8;base64,<?php echo $img ?>"/> 

Другая возможность для вас – создать скрипт, создающий данные изображения, на выход и направлять ссылку на него.

image.php

 $imagedata1 = file_get_contents('assets/test.png'); $imagedata1 = process_using_gd_or_something($imagedata1); header('Content-type: image/png'); echo $imagedata1; 

other_pages.php:

 echo "<img src='image.php?some_params'>"; 

EDIT: К сожалению, я пропустил уведомление о нежелании внешнего скрипта, но это решение более эффективно, чем кодирование изображения на base64.

Если вы просто хотите изображение, без каких-либо html вокруг него, вы можете использовать следующее:

 $filename = 'assets/test.png'; $original_image = file_get_contents($filename); $processed_image = process_the_image_somehow($original_image); header('Content-type: '.mime_content_type($filename)); header('Content-Length: '.strlen($processed_image)); echo $processed_image; 

Вы не должны забывать заголовок Content-Length, иначе он не будет работать. Вы также можете заменить mime_content_type (), поскольку он устарел в соответствии с документами.