У меня есть php-код, который создает миниатюру PDF следующим образом;
<?php $file ="test.pdf"; $im = new imagick(realpath($file).'[0]'); $im->setImageFormat("png"); $im->resizeImage(200,200,1,0); header("Content-Type: image/jpeg"); $thumbnail = $im->getImageBlob(); echo $thumbnail; ?>
Что хорошо работает. Но если я хочу отображать изображение на веб-странице, я должен использовать <img src="">
. Есть ли способ удалить header("Content-Type: image/jpeg");
из синтаксиса и эхо-изображения с использованием <img src="">
..? Или кто-нибудь скажет мне, как использовать синтаксис для отображения изображения внутри веб-страницы.
Я запускаю apache с php5 на моем ПК с Windows Vista.
вы можете попытаться отобразить изображение таким образом:
// start buffering ob_start(); $thumbnail = $im->getImageBlob(); $contents = ob_get_contents(); ob_end_clean(); echo "<img src='data:image/jpg;base64,".base64_encode($contents)."' />";
С помощью Imagick вы можете использовать кодировку base64:
echo '<img src="data:image/jpg;base64,'.base64_encode($img->getImageBlob()).'" alt="" />';`
Однако этот метод добр медленный, поэтому я рекомендую генерировать и сохранять изображение ранее $img->writeImage($path)
.
Вы можете вставить исходное изображение на свою страницу, см. Запись в блоге ниже для примера в синтаксисе страницы.
http://www.sveinbjorn.org/news/2005-11-28-02-39-23
Но я думаю, что было бы более продуктивно сохранять миниатюру в файловой системе и обслуживать ее как обычный файл. В противном случае вы будете создавать миниатюру каждый раз, когда страница будет доступна. Кто-то, возможно, загрузил этот PDF-файл, чтобы вы могли создать эскиз при загрузке.
Вложение изображения с использованием base64 является ПОЛНОСТЬЮ неправильным способом решения проблемы esp. с чем-то без гражданства, как php веб-скрипт.
Вместо этого вы должны использовать параметры http, чтобы иметь один php-файл, который может выполнять две задачи – по умолчанию будет отправлен html, а параметр проинструктирует файл php для печати изображения. Ниже приведен «стандартный» способ сделать это –
<?php if (!array_key_exists('display',$_GET)) { print('<html><head></head><body><img src="'.$_SERVER['PHP_SELF'].'?display=image"></body></html>'); } else { // The display key exists which means we want to display an image $file ="test.pdf"; $im = new imagick(realpath($file).'[0]'); $im->setImageFormat("png"); $im->resizeImage(200,200,1,0); header("Content-Type: image/jpeg"); $thumbnail = $im->getImageBlob(); echo $thumbnail; } ?>
Как я вижу, есть слишком много ответов, которые недостаточно точны, поэтому здесь идет моя:
Это напечатает изображение, как вы делаете это сейчас (к моменту запроса этого вопроса). В качестве альтернативы ответе @Vasil Dakov вы должны изменить фрагмент, который я вам дал следующим образом:
<?php // ... Image generation goes here header("Content-Type: image/jpeg"); ob_start(); print $im->getImageBlob(); $the_outputted_image = ob_get_flush(); ?> // Assuming that you use MVC approach and you are storing $the_outputted_image in a object and passing it to the view(ie. index.html or the HTML below the code). //... Html code of index.html <img src="data:image/jpg;base64 <?php print $the_outputted_image; ?>" alt="image" title="IMagick Generated Image" />
Другой альтернативой является создание сценария для создания изображения, сохранение его в некоторой папке (при условии, что img / является папкой) и возвращает только путь + имя файла + расширение в файл:
<?php // ... Image generation goes here header("Content-Type: image/jpeg"); $filename = 'img/' . md5(microtime()) . '.jpg'// Microtime is just as an example, you should use your own method. $fp = fopen($filename, "x"); //Creating and opening the file for write-only $im->writeImageFile($fp); //Writing the image to the file pointer (I would recommend writing it using, fwrite(), because it is binary-safe writing method) fclose($fp); ?> // Html <img src="<?php print $filename; ?>" alt="image" title="IMagick Generated Image" />
документация для Imagick :: writeImageFile
Единственным решением было бы преобразовать ваше изображение в base64 и включить его как встроенное изображение base64 ( data:image/png;base64,
). Дальнейшая ссылка .
Но это не поддерживается в IE 6 и 7.