Обработка фотографий

yyyurik

Новичок
Вообще думал создать тему, но думаю в эту как раз пойдет...
Суть таже, уменьшить фотографию(jpg, gif, png, bmp) + добавить эффект (рамка вокруг фотографии) и
пересохранить. Ниже приведен код который добавляет эффекты в виде рамки для фотографии
PHP:
<?php
$graphic2 = "12.jpg"; 						 // путь к изображению
list($width, $height) = getImageSize($graphic);   // ширина и высота изображения

// хранения изображений в памяти, чтобы мы могли использовать его с библиотекой GD
$image = imagecreatefromjpeg($graphic);
 /*Определение: imagecreatefromgif ( "папки / image.jpg"); 
Эта функция создает копию изображения и сохраняет изображения в переменных в PHP.
*/

// ХРАНЕНИЯ тени ИЗОБРАЖЕНИЙ
// Заносим все 8 теней в память.

$tl = imagecreatefromgif("images/shadow_TL.gif");
$t  = imagecreatefromgif("images/shadow_T.gif");
$tr = imagecreatefromgif("images/shadow_TR.gif");
$r  = imagecreatefromgif("images/shadow_R.gif");
$br = imagecreatefromgif("images/shadow_BR.gif");
$b  = imagecreatefromgif("images/shadow_B.gif");
$bl = imagecreatefromgif("images/shadow_BL.gif");
$l  = imagecreatefromgif("images/shadow_L.gif");

// Теперь все картинки которые нам нужны хронятся в памяти Т
// Теперь мы должны создать еще один (холст) для их вместе.
// Создаем холст
/*
Помните, что полотно должно быть больше, чем изображение, в противном случае изображение будет
 скрывать теневые картинки.В этом случае ширина полотна следует ширина изображения, а также в 
два раза ширину одной из теневой стороне изображения.
Иными словами: Ширина = Канва Ширина Image + 2 (Ширина боковой Image)
Прочтите еще раз, что это проще, чем кажется.
*/

// Первый мы находим размеры стороне изображения
$w = imagesx($l); 	// Ширина тени изображения влево
$h = imagesy($l);	//Высота левой теневой образ

/*
Далее мы получим наши новые высоты и ширины на холсте. Это создает изображение, которое несколько
 больше, чем  ваш образ.
*/
$canvasHeight = $height + (2*$w);
$canvasWidth  = $width + (2*$w);

//Третий мы создаем пустой холст с этими новыми размерами
$canvas = imagecreatetruecolor($canvasWidth, $canvasHeight);
/*
Объединяем фотографии. У нас есть графические изображения, образы и тени холст готов. Теперь пришло
время объединять!
В первом разделе мы добавив сверху, слева, снизу, а затем правой секции.
*/

imagecopyresized($canvas, $t,0,0,0,0,$canvasWidth,$w,$h,$w);
imagecopyresized($canvas, $l,0,0,0,0,$w,$canvasHeight,$w,$h);
imagecopyresized($canvas, $b,0,$canvasHeight-$w,0,0,$canvasWidth,$w,$h, $w);
imagecopyresized($canvas, $r,$canvasWidth-$w,0,0,0,$w,$canvasHeight,$w,$h);
//	Здесь я делаю то же самое еще раз, только на этот раз я в настройке и $ W $ h для ширины
и высоты углов.
$w = imagesx($tl);
$h = imagesy($tl);
imagecopyresized($canvas, $tl,0,0,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $bl,0,$canvasHeight-$h,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $br,$canvasWidth-$w,$canvasHeight-$h,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $tr,$canvasWidth-$w,0,0,0,$w,$h,$w, $h);

/*
На данный момент полотно имеет все тени изображения 
Я изменил $ W к размеру периметру, с тем чтобы правильно разместить изображение.
*/
$w = imagesx($l);
$imj=imagecopyresampled($canvas, $image, $w,$w,0,0,  imagesx($image), imagesy($image), imagesx($image),imagesy($image));
// Заметьте, то я использовал imagecopyresampled, причина этого заключается получить гораздо более
высокое качество изображения по сравнению с imagecopy
// размер. Тем не менее, я в жертву скорости для этого качества.
//Это определяет тип заголовка (какая файл это?) В буквальном смысле этого PHP-файла превращается в GIF.
	header("content-type: image/jpeg");
Imagejpeg($canvas);
ImageDestroy($canvas);
?>
Изображения рамки для фотографии
После у нас получается следующее изображение:

И еще функция, которая сжимает фотографию до нужного размера без потери качества
PHP:
	function imageresize($outfile,$infile,$neww,$newh,$quality)  
	{  
  		$im=imagecreatefromjpeg($infile);
  	 	$k1=$neww/imagesx($im);      
  		$k2=$newh/imagesy($im);       
  		$k=$k1>$k2?$k2:$k1;        
   		$w=intval(imagesx($im)*$k);       
   		$h=intval(imagesy($im)*$k);         
   		$im1=imagecreatetruecolor($w,$h);      
   		imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));        
 		imagejpeg($im1,$outfile,$quality);      
     	imagedestroy($im);       
     	imagedestroy($im1);     
/*imageresize("$outfile", "$image",118,250,80);  $outfile - адрес конечного изображения(img/12.jpg), $image- 
адрес начального изображения,  118 - ширина картинки в пикселях, 250-высота, 80 - качество картинки.. */
	}
У меня не получается объединить эти 2 программки, то не сжимается до нужного размера, то эффект не добавляется((( не могу понять от чего...
P.S. Возможны какие-либо не точности, т.к. только учусь:)
 

Фанат

oncle terrible
Команда форума
Вообще думал создать тему, но думаю в эту как раз пойдет...
думать вредно

У меня не получается объединить эти 2 программки, то не сжимается до нужного размера, то эффект не добавляется((( не могу понять от чего...
мы тоже не можем понять, отчего у тебя не получается
поскольку ни единой строчки своего кода ты не привел.
 

yyyurik

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

Фанат

oncle terrible
Команда форума
У меня не получается объединить эти 2 программки, то не сжимается до нужного размера, то эффект не добавляется(((
это - твои слова?
здесь ты говоришь о коде или о магических пассах руками?

приведи здесь код, которым у тебя "не получилось".
 

yyyurik

Новичок
Вот ниже представлен код, он работает, но конечная фотография без рамки...:(
PHP:
<?php
$graphic2 = "12.jpg"; 						 // путь к изображению
  // ширина и высота изображения

	function imageresize($outfile,$infile,$neww,$newh,$quality)  
	{  
  		$im=imagecreatefromjpeg($infile);
  	 	$k1=$neww/imagesx($im);      
  		$k2=$newh/imagesy($im);       
  		$k=$k1>$k2?$k2:$k1;        
   		$w=intval(imagesx($im)*$k);       
   		$h=intval(imagesy($im)*$k);         
   		$im1=imagecreatetruecolor($w,$h);      
   		imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));        
 		imagejpeg($im1,$outfile,$quality);      
     	imagedestroy($im);       
     	imagedestroy($im1);     
	}
	
$graphic="images/25.jpg";	
$graphicss=imageresize("images/25.jpg","12.jpg",200,386,80) ;
echo "<img src='http://shoprc2/${graphicss}>'";
// хранения изображений в памяти, чтобы мы могли использовать его с библиотекой GD
$image = imagecreatefromjpeg($graphic);

list($width, $height) = getImageSize($graphic);
/*
Определение: imagecreatefromgif ( "папки / image.jpg");
Эта функция создает копию изображения и сохраняет изображения в переменных в PHP.
*/

// ХРАНЕНИЯ тени ИЗОБРАЖЕНИЙ
// Заносим все изображения все 8 теней в память.

$tl = imagecreatefromgif("images/shadow_TL.gif");
$t  = imagecreatefromgif("images/shadow_T.gif");
$tr = imagecreatefromgif("images/shadow_TR.gif");
$r  = imagecreatefromgif("images/shadow_R.gif");
$br = imagecreatefromgif("images/shadow_BR.gif");
$b  = imagecreatefromgif("images/shadow_B.gif");
$bl = imagecreatefromgif("images/shadow_BL.gif");
$l  = imagecreatefromgif("images/shadow_L.gif");

// Теперь все картинки которые нам нужны хронятся в памяти Теперь у нас хранятся все картинки, которые мы собираемся использовать.
// Теперь мы должны создать еще один (холст) для их вместе.

// Создаем холст
/*
Помните, что полотно должно быть больше, чем изображение, в противном случае изображение будет скрывать теневые картинки.
В этом случае ширина полотна следует ширина изображения, а также в два раза ширину одной из теневой стороне изображения.

Иными словами: Ширина = Канва Ширина Image + 2 (Ширина боковой Image)

Прочтите еще раз, что это проще, чем кажется.
*/

// Первый мы находим размеры стороне изображения
$w = imagesx($l); 	// Ширина тени изображения влево
$h = imagesy($l);	//Высота левой теневой образ

/*
Далее мы получим наши новые высоты и ширины на холсте. Это создает изображение, которое несколько больше, чем
ваш образ.
*/
$canvasHeight = $height + (2*$w);
$canvasWidth  = $width + (2*$w);

//Третий мы создаем пустой холст с этими новыми размерами
$canvas = imagecreatetruecolor($canvasWidth, $canvasHeight);


// ----------------------------------------
// 	Ввод изображений вместе
// ----------------------------------------

/*
У нас есть графические изображения, образы и тени холст готов. Теперь пришло время писать!
В первом разделе мы добавив сверху, слева, снизу, а затем правой секции.
*/

imagecopyresized($canvas, $t,0,0,0,0,$canvasWidth,$w,$h,$w);
imagecopyresized($canvas, $l,0,0,0,0,$w,$canvasHeight,$w,$h);
imagecopyresized($canvas, $b,0,$canvasHeight-$w,0,0,$canvasWidth,$w,$h, $w);
imagecopyresized($canvas, $r,$canvasWidth-$w,0,0,0,$w,$canvasHeight,$w,$h);


//	Здесь я делаю то же самое еще раз, только на этот раз я в настройке и $ W $ ч для ширины и высоты углов.
$w = imagesx($tl);
$h = imagesy($tl);
imagecopyresized($canvas, $tl,0,0,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $bl,0,$canvasHeight-$h,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $br,$canvasWidth-$w,$canvasHeight-$h,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $tr,$canvasWidth-$w,0,0,0,$w,$h,$w, $h);

/*
На данный момент полотно имеет все тени изображения прилагаются все мы должны сейчас сделать, это прикрепить изображение, и мы сделали!
Я изменил $ W к размеру периметру, с тем чтобы правильно разместить изображение.
*/
$w = imagesx($l);
  
		
$imj=imagecopyresampled($canvas, $image, $w,$w,0,0,  imagesx($image), imagesy($image), imagesx($image),imagesy($image));
echo "<img src='http://shoprc2/${imj}.jpg>'";
$outfile="images/${canvas}";
imagejpeg($canvas,$outfile);



// Заметьте, то я использовал imagecopyresampled, причина этого заключается получить гораздо более высокое качество изображения по сравнению с imagecopy
// размер. Тем не менее, я в жертву скорости для этого качества.


// ----------------------------------------
// OUTPUTTING THE IMAGE
// ----------------------------------------
 	//Это определяет тип заголовка (какая файл это?) В буквальном смысле этого PHP-файла превращается в GIF.
/*	header("content-type: image/jpeg");
Imagejpeg($canvas);
ImageDestroy($canvas);*/
?>
 

Фанат

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

-~{}~ 27.02.09 14:37:

тем методом, которым ты действуешь - последовательным написанием кусков кода друг над другом.
 

yyyurik

Новичок
>тем методом, которым ты действуешь - последовательным написанием кусков кода друг над другом.
Для нормального программирования не хватает практики:(
Вообщем сделал, но незнаю локанично или нет, может можно было по проще(ниже представлен рабочий код)?...:(
Суть работы: берет из базы адрес фотографии, сжимает ее до нужных размеров + добавляет эффект красивой рамки (результат http://7-8.at.tut.by/images.jpg)-> заносит адрес фотки в базу (сделал т.к. на сайте были файлы bmp формата). При этом все работает в цикле, т.к. нужно было обработать порядка 1300 фотографий:)
PHP:
<?php

$db=mysql_connect ("localhost","root","root");
mysql_select_db("root", $db);
	function imageresize($outfile,$infile,$neww,$newh,$quality)  
	{  
  		$im=imagecreatefromjpeg($infile);
		
  	 	$k1=$neww/imagesx($im);      
  		$k2=$newh/imagesy($im);       
  		$k=$k1>$k2?$k2:$k1;        
   		$w=intval(imagesx($im)*$k);       
   		$h=intval(imagesy($im)*$k);         
   		$im1=imagecreatetruecolor($w,$h);      
   		imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));        
 		imagejpeg($im1,$outfile,$quality);      
     	imagedestroy($im);       
     	imagedestroy($im1);     
	}
	
for ($downid=1301; $downid<1330; $downid ++){

$result=mysql_query("SELECT image_thumb FROM dn052_down WHERE downid='$downid'", $db);
if (!$result)  
{
echo "<p> Запрос на выборку данных из базы не прошел. Код ошибки:</strong>";
exit(mysql_error());
}
$myrow = mysql_fetch_array($result);

$outfile=$myrow['image_thumb'];	
if ($outfile =='') {echo "Нет фотографии в id=${downid}<br>";}
else{
$infile = $outfile;
$graphicss=imageresize($outfile,$infile,250,386,100) ;
$graphic = $outfile; 
list($width, $height) = getImageSize($graphic);
$image = imagecreatefromjpeg($graphic);
$tl = imagecreatefromgif("images/shadow_TL.gif");
$t  = imagecreatefromgif("images/shadow_T.gif");
$tr = imagecreatefromgif("images/shadow_TR.gif");
$r  = imagecreatefromgif("images/shadow_R.gif");
$br = imagecreatefromgif("images/shadow_BR.gif");
$b  = imagecreatefromgif("images/shadow_B.gif");
$bl = imagecreatefromgif("images/shadow_BL.gif");
$l  = imagecreatefromgif("images/shadow_L.gif");

$w = imagesx($l); 	
$h = imagesy($l);	

$canvasHeight = $height + (2*$w);
$canvasWidth  = $width + (2*$w);

$canvas = imagecreatetruecolor($canvasWidth, $canvasHeight);

imagecopyresized($canvas, $t,0,0,0,0,$canvasWidth,$w,$h,$w);
imagecopyresized($canvas, $l,0,0,0,0,$w,$canvasHeight,$w,$h);
imagecopyresized($canvas, $b,0,$canvasHeight-$w,0,0,$canvasWidth,$w,$h, $w);
imagecopyresized($canvas, $r,$canvasWidth-$w,0,0,0,$w,$canvasHeight,$w,$h);


$w = imagesx($tl);
$h = imagesy($tl);
imagecopyresized($canvas, $tl,0,0,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $bl,0,$canvasHeight-$h,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $br,$canvasWidth-$w,$canvasHeight-$h,0,0,$w,$h,$w,$h);
imagecopyresized($canvas, $tr,$canvasWidth-$w,0,0,0,$w,$h,$w, $h);

$w = imagesx($l);
  		
imagecopyresampled($canvas, $image, $w,$w,0,0,  imagesx($image), imagesy($image), imagesx($image),imagesy($image));

imagejpeg($canvas,$outfile);
echo "<img src='$outfile'>";
	$result4 = mysql_query ("UPDATE dn052_down SET image_thumb='$outfile'  WHERE downid='$id'", $db) ;
		if ($result4 == 'true') 	{
								echo "<p>Фотография успешно обновлена ${id}</p>";
								}
				else 
						{echo "<p>Фотография не обновлена!</p>";}
}
}
?>
 

DiMA

php.spb.ru
Команда форума
если это разовая работа или сайт не мега популярен - проблем от твоего говно-кода не будет (ну, если он не дырявый), главное - чтобы работал, а это проверяй сам
 
Сверху