Создание thumb и добовление Watermark, Помогите с этим

Kirpi4-Web

Новичок
Добрый день....
Очень долго лопачу весь интернет в поисках функций...
У меня стоит задача в уменьшении картинки и добавления watermark

Объясню подробнее:
на сервере лежит изображение с названием 1.jpg размер 4368x2912

1) Требуется создать из этого изображения 3 разных изображения, а именно с размером 179x139 - 1-thumb.jpg, 900x540 - 1.jpg, 1500x1000 - 1-big.jpg

2) На изображения 1.jpg и 1-big.jpg наложить водяной знак который лежит там же в корне под названием watermark.png но при этом имеет размер 1000x700, то есть его нужно уменьшать для каждого фото по своему и накладывать в нижний правый угол.

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

Заранее благодарю.
 

Redjik

Джедай-мастер
пошарь php classes там тонны решений для GD либы, которая в свою очередь легко тебе это сделает.

ЗЫ. а не проще вотермарк ручками сначала уменьшить?
 

Kirpi4-Web

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

Redjik

Джедай-мастер
img2thumb ресайзит ... правда он на php 4... но работает более менее сносно ... осталось тебе толкьо для вм найти
 

Kirpi4-Web

Новичок
если не сложно напишите маленький пример с использованием image-toolbox например на ресайз
 

Kirpi4-Web

Новичок
мне важен ресайз по точно заданным размером, и не важно какой ориентации будет изображение, горизонтальной или вертикальной, то есть имеем изображение 100 на 150, а нужно получить 70 на 50, то есть сначала уменьшение до 70 по горизонтали, а затем обрезка по вертикали до размера 50, а все что есть в инете либо до квадрата обрезка, либо просто масштабирование, плюс так же непонятно с вотер марком.
 

baev

‹°°¬•
Команда форума
мне важен ресайз по точно заданным размером, и не важно какой ориентации будет изображение, горизонтальной или вертикальной, то есть имеем изображение 100 на 150, а нужно получить 70 на 50, то есть сначала уменьшение до 70 по горизонтали, а затем обрезка по вертикали до размера 50, а все что есть в инете либо до квадрата обрезка, либо просто масштабирование, плюс так же непонятно с вотер марком.
— и? В чём проблема-то? Вы в школе геометрию не проходили?

Переношу тему в «Ищу готовое решение»: тут «программирования на php» пока не наблюдается.
 
  • Like
Реакции: KorP

SiZE

Новичок
если не сложно напишите маленький пример с использованием image-toolbox например на ресайз
Документация и описания классов там есть, разобраться не сложно. Примерно так.
PHP:
require_once( 'Image_Toolbox.class.php' );
$img_toolbox = new Image_Toolbox();
$img_toolbox->newImage( 'image.jpg' );
$img_toolbox->newOutputSize( 179, 139, 0 );
$img_toolbox->save( 'new_image.jpg', FALSE, 90 );
 

Kirpi4-Web

Новичок
Помогите, все сделал, навел бардак но сделал, только у png прозрачности нету =( посмотрите пжлст
пример работы скрипта тут рай-он.рф/watermark/
PHP:
<?php
function img_resize($src, $dest, $width, $height, $watermark_img, $opacity, $rgb=0xFFFFFF, $quality=100)
{
  if (!file_exists($src)) return false;

  $size = getimagesize($src);

  if ($size === false) return false;

  // Определяем исходный формат по MIME-информации, предоставленной
  // функцией getimagesize, и выбираем соответствующую формату
  // imagecreatefrom-функцию.
  $format = strtolower(substr($size['mime'], strpos($size['mime'], '/')+1));
  $icfunc = "imagecreatefrom" . $format;
  if (!function_exists($icfunc)) return false;
  $x_ratio = $width / $size[0];
  $y_ratio = $height / $size[1];
	$left1 = 0;
  	$top1 = 0;
  	$new_left = 0;
  	$new_top = 0;
  $wi = $size[1] / ($size[0] / $width) - $height;
  $hi = $size[0] / ($size[1] / $height) - $width;
  
  if($size[0]<=$width or $size[1]<=$height){
  	copy ($src, $dest);
  	
  }

  else{
  if($size[0] == $size[1] and $width==$height){
  $ratio       = min($x_ratio, $y_ratio);
  $use_x_ratio = ($x_ratio == $ratio);

  $new_width   = $use_x_ratio  ? $width  : floor($size[0] * $ratio);
  $new_height  = !$use_x_ratio ? $height : floor($size[1] * $ratio);
  $new_left    = $use_x_ratio  ? 0 : floor(($width - $new_width) / 2);
  $new_top     = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
  }
  else if($wi > $hi or ($size[0] == $size[1] and $width > $height)){
  	$xya = $size[0] / $width;  	
  	$xyb = (($size[1] / $xya) - $height);
  	$left1 = 0;
  	$top1 = ($xyb / 2) * $xya;
  	$new_width = $width;
  	$new_height = $height+$xyb;
  }
 else if($hi > $wi or ($size[0] == $size[1] and $width < $height)){
  	$xya = $size[1] / $height;  	
  	$xyb = (($size[0] / $xya) - $width);
  	$left1 = ($xyb / 2) * $xya;
  	$top1 = 0;
  	$new_height = $height;
  	$new_width = $width + $xyb;
 }
  $isrc = $icfunc($src);
  $idest = imagecreatetruecolor($width, $height);

  imagefill($idest, 0, 0, "255 255 255");
  imagecopyresampled($idest, $isrc, $new_left, $new_top, $left1, $top1, $new_width, $new_height, $size[0], $size[1]);
  $watermark = imagecreatefrompng($watermark_img);
  imagesavealpha($watermark, true);
  $wm_size = getimagesize($watermark_img);
  $wm_width = $wm_size[0];  
  $wm_height = $wm_size[1]; 
  $wm_nw = ($width / 20) * 8;
  $wm_nh = $wm_height / ($wm_width / $wm_nw);
  $dest_x = $width/20*11;
  $dest_y = $height - (($dest_x/11) + $wm_nh);
  $dstimage=imagecreatetruecolor($wm_nw,$wm_nh);
  imagesavealpha($dstimage, true);
  imagecopyresampled($dstimage,$watermark,0,0,0,0, $wm_nw,$wm_nh,$wm_size[0],$wm_size[1]);
  imagecopymerge($idest, $dstimage, $dest_x, $dest_y, 0, 0, $wm_nw, $wm_nh, $opacity);
  imagejpeg($idest, $dest, $quality);
  imagedestroy($watermark);
  imagedestroy($isrc);
  imagedestroy($idest);
  }
  return true;

}
 img_resize("1.jpg", "11.jpg", 500, 300, "watermark.png", 10, $rgb=0xFFFFFF, $quality=100)
?>

<img src="1.jpg" width="500">
<br>
<img src="11.jpg">
 
Сверху