2013-02-21 3 views
0

Итак, мне нужно объединить изображения (36 или 48) изображений на другое изображение (enter image description here);Сложите много изображений с помощью PHP GD (imagecopymerge) заблаговременно

Разрешение 4800x4800 пикселей. Таким образом, каждый квадрат будет иметь размер 695x695; В настоящее время я пришел к этому решению:

$i = 1; 
     $x = 140; $y = 140; 
     foreach($files as $file): 
      if($i > 1) $template = 'test.png'; 
      else $template = 'templates/24x24-TEMPLATE.png'; 
      $this->save_image($file,'templates/temp.jpg'); 
      $src = imagecreatefromjpeg('templates/temp.jpg'); 
      $src2 = imagecreatetruecolor(695,695); 
      imagecopyresampled($src2, $src, 0, 0, 0, 0, 695, 695, 612, 612); 
      imagejpeg($src2,'templates/temp.jpg'); 
      imagedestroy($src2); 
      $src = imagecreatefromjpeg('templates/temp.jpg'); 
      $dest = imagecreatefrompng($template); 
      imagealphablending($dest, false); 
      imagesavealpha($dest, true); 
      imagealphablending($src, false); 
      imagesavealpha($src, true); 
      imagecopymerge($dest, $src, $x, $y, 0, 0, 695, 695, 100); //have to play with these numbers for it to work for you, etc. 
      imagepng($dest,'test.png'); 
      /* Destroy the images to free up space */ 
      imagedestroy($dest); 
      imagedestroy($src); 
      $x = $x + 695 + 65; 
      if($i % 6 == 0): 
       $y = $y + 695 + 65; 
       $x = 140; 
      endif; 
      $i++; 
     endforeach; 

ведьма загружает файл, который нужно положить на площадь, сливает его с квадратами, и делает это для всех изображений, пока все квадраты не будут заполнены. Но этот код, для 20 изображений, занимает до 5 минут! Мне нужно что-то, что может занять до 30 секунд, чтобы заполнить квадраты изображениями, а затем сгенерировать один файл PDF.

Есть ли способ улучшить это? Или есть ли другой способ сделать это быстрее и лучше?

+0

Вы пробовали wkhtmltopdf, вы покажете изображения в html, после этого звонка wkhtmltopdf – sanj

+0

Мне действительно не нужно это делать. Мне нужно обработать изображения в бэкэнд, потому что я не хочу иметь большой документ, такой как 4800x4800 на веб-странице; – roshkattu

ответ

1

Я предполагаю, что «в хорошее время» вы подразумеваете быстро и эффективно.

Тогда ответ, вероятно, будет сделан за пределами PHP. Хотя данные в основном хранятся в пользовательских структурах данных с использованием расширения GD, в PHP-коде все еще много накладных расходов. Есть lots of tools for merging images с целью генерации CSS спрайтов - однако они не все обеспечивают контроль над компоновкой изображений. Вы можете написать свой собственный, используя GD и C.

Но зачем беспокоиться? Если вы хотите получить результат как PDF, почему бы просто не написать отдельные изображения непосредственно в PDF?

+0

да. правильно. Я устал прошлой ночью, и я усложнил себя созданием образа. Я должен просто объединить все в PDF с начала. ой – roshkattu