2010-01-06 2 views
2

Я хочу управлять отображением изображений с помощью библиотеки PHP GD. Я собираюсь добавить текст в нижний угол его на лету, когда браузер запрашивает изображение, а чем сохранение текста в изображении.Обработка и вывод изображений с использованием GD в php

Я знаю, что могу это сделать: установить тип MIME в заголовок, а затем вызвать imagepng(...) с именем файла, чтобы просто отобразить изображение в браузере, но как я могу встроить его в документ? Мол,

<img src='somefile.php?i=1' ... /> 

я просто называю imagepng с именем файла, но без установки заголовков?

Кроме того, если кто-то копирует источник изображения из исходного кода и переходит к нему в браузере ... что произойдет, если заголовки не установлены? Будет ли изображение отображаться так, как если бы было запрошено фактическое изображение?

ответ

4

Если вы создаете изображение на somefile.php, когда пользователь пытается получить доступ к этому URL-адресу напрямую, выход браузера будет изображением, если только они не укажут переменную, которая содержит идентификатор/имя самого изображения.

Чтобы использовать изображение на html, я просто делаю <img src='somefile.php?f=FILENAME' />, чтобы сделать его более читаемым (если у вас есть соответствующие названия изображений).

Обязательно обрабатывайте не определенный доступ к somefile.php путем перенаправления или отображения изображения по умолчанию.

О заголовках, вот что говорит браузеру, какой тип файла он будет обрабатывать, поэтому обязательно указывайте их всегда. Например:

#somefile.php 

header('content-type: image/jpeg'); 

$watermark = imagecreatefrompng('watermark.png'); 
$watermark_width = imagesx($watermark); 
$watermark_height = imagesy($watermark); 

$image = imagecreatetruecolor($watermark_width, $watermark_height); 
$image = imagecreatefromjpeg($_GET['src']); //Path to the image file 

$size = getimagesize($_GET['src']);   
$dest_x = $size[0] - $watermark_width - 5; 
$dest_y = $size[1] - $watermark_height - 5; 

imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100); 
imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 

Так выводить изображение с этим кодом на вашей HTML странице, вы могли бы сделать следующее:

<img src='somefile.php?src=filePath' /> 

Примечание: Если вы не хотите, JPG просто изменить его PNG.

Дополнительная документация о наличии GD + PHP here.

+0

ОК, поэтому я указываю заголовок в файле PHP, генерирующем изображение, а затем выводя изображение, а затем я могу просто вызвать php-скрипт из тега img, и он будет работать? Кроме того, имя файла изображения является странно деталью реализации. Все имена файлов - это подсказки, и некоторые из них не должны быть доступны, поэтому здесь небезопасно :) –

+0

Вы должны подумать о том, что имена этих изображений хранятся в базе данных, а когда вы вызываете «somefile.php», создайте $ _GET переменная индекса этого конкретного изображения в базе данных. – johnnyArt

+0

В базе данных есть метаданные изображения, но сами изображения хранятся на диске. –

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