Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Создание объединенного превью изображения
Форумы портала PHP.SU » » Графика в PHP » Создание объединенного превью изображения

Страниц (1): [1]
 

1. Foster - 04 Ноября, 2012 - 11:35:54 - перейти к сообщению
Здраствуйте, столкнулся с проблемой: не могу из 10-20 маленьких картинок создать одну большую - тоесть скринлист (thumbnail). В сети нашёл решения которые позволяют только уменьшать изображения до указанного размера, мне же нужно склеить между собой все маленькие изображения в одно большое(цельное) изображение. Есть 1 нюанс, высота и ширина картинок может быть различной.

PHP:
скопировать код в буфер обмена
  1. $x=count($news['screen']); // Считаем кол-во картинок(ссылок на них)
  2.  
  3.  
  4.       $im2=imagecreatetruecolor(1280,1024); // задаем размер холста.
  5.       for($i=0;$i<$x;$i++)
  6.       {
  7. // Открываем каждое изображение по ссылке
  8.          $curl = curl_init();
  9.          curl_setopt($curl, CURLOPT_URL, str_replace(" ", "%20", $news['screen'][$i]));
  10.          curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  11.          curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  12.          curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
  13.          curl_setopt($curl, CURLOPT_ENCODING,'gzip,deflate');
  14.          curl_setopt($curl, CURLOPT_COOKIE, $cookie);
  15.          curl_setopt($curl, CURLOPT_PROXY, $proxy);
  16.          curl_setopt($curl, CURLOPT_PROXYUSERPWD, $auth);
  17.          $res = curl_exec($curl);
  18.          curl_close($curl);
  19.          file_put_contents('tmp.img', $res);
  20. // Далее склеиваем картинки между собой, по 5 штук в ширину, после чего переходим в нижнюю "строку".
  21.  
  22.          $im1=imagecreatefromjpeg('tmp.img');
  23.          $size_x=imageSX($im1);
  24.          $size_y=imageSY($im1);
  25.  
  26.          if($i% 5 === 0){$d=0; if($i !==0){$n++;}  } else{$d++;}
  27.          imageCopy($im2,$im1,$size_x*$d,$size_y*$n,0,0,$size_x,$size_y);
  28.       }
  29.       imagejpeg($im2, "2.jpeg");
  30.       unlink('tmp.img');


Проблема в том, что иногда картинки имеют разную высоту\ширину.
И если раньше, когда размер у всех картинок был одинаков и проблем с созданием скрин-листов не было, то сейчас получается вот так http://funkyimg[dot]com/u2/2614/133/6593102[dot]jpeg - ВНИМАНИЕ ССЫЛКАСОДЕРЖИТ АДАЛТМАТЕРИАЛ!
2. Foster - 05 Ноября, 2012 - 17:11:32 - перейти к сообщению
Ребят, помогите пожалуста, вопрос наложения картинок друг на друга решил, но теперь не могу понять как избавиться от расстояния по оси "х" между первой и второй картинками

CODE (text):
скопировать код в буфер обмена
  1. //склеиваем
  2.                         $x=7;
  3.                         $n=$d=$size_x_total=0;
  4.                         $bool=true;
  5.                         $im2=imagecreatetruecolor(1280,1024); // задаем размер холста.
  6.                         for($i=0;$i<$x;$i++)
  7.                         {
  8.                                
  9.                                 $im1=imagecreatefromjpeg('./img/'.$i.'.jpg');
  10.                                 $size_x=imageSX($im1); $size_x_total=$size_x+$size_x_total;
  11.                                 $size_y=imageSY($im1);
  12.                
  13.                                 if($size_x_total <= 1280){if($bool){$size_x_total=0; $bool=false;}  } else{$n++; $size_x_total=0; $bool=true;}
  14.  
  15.                                 imageCopy($im2,$im1,$size_x_total,$size_y*$n,0,0,$size_x,$size_y);
  16.                                 echo $size_x_total."<br>";
  17.                         }
  18.                         //$file_list = glob("./img/*.jpg");
  19.                         imagejpeg($im2, "2.jpeg");

Исходник с картинками тут http://zalil[dot]ru/33928649

 

Powered by ExBB FM 1.0 RC1