PHP-Imagemagick отображение изображений
у меня есть 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..
6 ответов
вы можете попробовать отобразить изображение следующим образом:
// 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)
.
встраивание изображения с помощью 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;
}
?>
вы можете встроить необработанное изображение на страницу, см. Запись в блоге ниже для примера в синтаксисе страницы.
http://www.sveinbjorn.org/news/2005-11-28-02-39-23
но я думаю, что было бы более продуктивно сохранить миниатюру в файловой системе и использовать ее как обычный файл. В противном случае вы будете генерировать миниатюру каждой страницы. Кто-то, возможно, загрузил этот PDF-файл, поэтому вы можете также создать миниатюру при загрузке время.
Как я вижу, слишком много ответов, которые недостаточно точны, поэтому вот мой:
это напечатает изображение, как вы это делаете сейчас (ко времени задать этот вопрос). В качестве альтернативы ответу @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" />
единственным решением было бы преобразовать ваше изображение в base64 и включить его в качестве встроенного изображения base64 (data:image/png;base64,
). далее.
но это не поддерживается в IE 6 и 7.