2012-06-04 2 views
0

Я тестирую сценарий, где я водялю изображение на своей веб-странице.PHP-изображение водяного знака, отображающего только изображение на странице

Скрипт отлично работает, и изображение является водяным знаком, но моя проблема заключается в том, что на странице отображается только изображение.

Как только я добавляю скрипт на свою страницу, это похоже на то, что веб-страница преобразуется в изображение, которое я водяной знак.

Я думаю, что это из-за заголовка («content-type: image/jpeg»); из кода.

Мне нужно сделать водяной знак изображения на моей веб-странице, но мне также нужно, чтобы остальная часть моей веб-страницы отображалась тоже.

Как это делается? Я совершенно смущен тем, как это работает.

Сценарий я использую из here

Вот код, я использую:

<?php 

$main_img  = "Porsche_911_996_Carrera_4S.jpg"; // main big photo/picture 
$watermark_img = "watermark.gif"; // use GIF or PNG, JPEG has no tranparency support 
$padding  = 3; // distance to border in pixels for watermark image 
$opacity  = 100; // image opacity for transparent watermark 

$watermark = imagecreatefromgif($watermark_img); // create watermark 
$image  = imagecreatefromjpeg($main_img); // create main graphic 

if(!$image || !$watermark) die("Error: main image or watermark could not be loaded!"); 


$watermark_size  = getimagesize($watermark_img); 
$watermark_width = $watermark_size[0]; 
$watermark_height = $watermark_size[1]; 

$image_size  = getimagesize($main_img); 
$dest_x   = $image_size[0] - $watermark_width - $padding; 
$dest_y   = $image_size[1] - $watermark_height - $padding; 


// copy watermark on main image 
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, $opacity); 


// print image to screen 
header("content-type: image/jpeg"); 
imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 

?> 

ПРИМЕЧАНИЕ: Я получаю путь изображения из базы данных, так что я не могу жёстко имя файла изображения, так как оно динамическое.

ответ

5

Это немного ошеломляет, если вы делаете это в первый раз, но как только вы увидите, как это работает, это очень просто. ;)

Вам нужен один сценарий, который генерирует изображение (например, image.php), а затем ваш основной скрипт ссылается на это изображение (например, <img src="image.php">). Невозможно, чтобы один запрос/сценарий возвращал как документ, так и изображение одновременно.

(PS. Это действительно возможно, но она включает в себя кодирование изображения как очень странный вид src атрибута. Вы не хотите, чтобы сделать это, поверьте мне.)

+0

Хммм ... Похоже, что у меня есть проблема, потому что путь изображения, который я получаю от базы данных, так что изображение динамическое. : o/ – Satch3000

+1

+1 для «вы не хотите этого делать, поверьте мне»;) – hakre

2

Я считаю, что вы запутались о том, как это works: Созданный выше код водяного знака не должен включаться в скрипты/логику создания страницы. Вместо этого он должен быть доступен за его собственным URL-адресом, а затем связан через <img src="./path/to/script"/> на сайт, в который вы хотите сместить это изображение.

0

Этот сценарий полностью отделен от вашего сценария «основного сайта». На вашем веб-сайте используйте тег <img>, в качестве источника которого используется этот сценарий водяных знаков.

Вы не можете комбинировать два разных content-types, как будто вы собираетесь делать. Если вы хотите, чтобы отображалась «веб-страница», content-type должен быть text/html. Если вы хотите, чтобы отображалось только изображение, content-type должно быть image/*.