Я создаю изображения текста, используя Imagick (думаю, баннеры сайта – они выглядят так). У меня заканчивается нехватка ресурсов на сервере в этой функции, в частности, в annotate
строке.
public function output_image($type = 'png') { $this->set_draw($this->font_size); $this->image->newImage($this->width*1.3, $this->line_height*2.5, 'transparent'); // make an image that's too big $this->image->annotateImage($this->draw, $this->font_size*0.5, //x offset for cursive fonts $this->font_size, // vertical offset for tall ascenders 0, //angle $this->text); // add the text $this->image->trimImage(0); // trim it. $this->image->setImageFormat($type); $this->base64 = base64_encode($this->image); echo "<img src='data:image/$type;base64,{$this->base64}'/>"; }
В моей локальной среде (win 8.1, xampp, 4gb ram) это быстро.
На сервере (godaddy linux, 1 GB RAM) он выделяет ресурсы и занимает 10 раз дольше, чем в локальной среде ( до 4,5 секунд для длины предложения).
Я подсчитал каждую функцию в классе и обнаружил, что время тратится на строку annotateImage()
.
Я могу бросить оборудование на проблему, но мне было интересно, есть ли лучший способ написать текст на изображении? Или способ ускорить работу аннотатов (снизить качество изображения и т. Д.)?
Похоже, что на сервере (linux) shell_exec
действительно намного быстрее, чем расширение php; давая лучшее время, чтобы окна были (даже до 0,1 секунды). С другой стороны, окна получают крошечный удар производительности с помощью shell_exec
.
Я предполагаю, что это из-за версии на godaddy – на сегодняшний день это 6.5.4-7
, которая является версией 2009 года. Я запускал 6.7.7-4
в окне окна. Если они работают с 5-летней версией программы, расширение php, возможно, претерпело значительные улучшения с тех пор.