Я генерирую изображения текста с помощью 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, 4 ГБ оперативной памяти) это быстро.
На сервере (godaddy linux, 1 ГБ ОЗУ) максимально используются ресурсы, и это занимает в 10 раз больше времени, чем в моей локальной среде (до 4,5 секунд для длины предложения).
Я замерил время каждой функции в классе и обнаружил, что время тратится на строку annotateImage()
.
Я могу использовать аппаратное обеспечение для решения проблемы, но мне интересно, есть ли лучший способ написать текст на изображении? Или способ ускорить работу аннотации (уменьшить качество изображения и т. д.)?