Я пытаюсь добавить текст к изображениям в Magick ++ делая так:Как добавить перенос слов в текстах в Magick ++
Метод 1:
Magick::Image image(Magick::Geometry(800,800),Magick::Color("white"));
Magick::Color color(0,0,0,0);
image.font("Waree");
image.fontPointsize(36);
image.strokeColor(color);
image.fillColor(color);
image.annotate("HelloWorld!", NorthWestGravity);
Способ 2:
Magick::Image image(Magick::Geometry(800,800),Magick::Color("white"));
Magick::Color color(0,0,0,0);
std::list<Magick::Drawable> text_draw_list;
text_draw_list.push_back(Magick::DrawableViewbox(0,0,image.columns(), image.rows()));
text_draw_list.push_back(Magick::DrawableFont("Waree", (Magick::StyleType)NormalStyle, 400, (Magick::StretchType)NormalStretch));
text_draw_list.push_back(Magick::DrawablePointSize(36));
//Manual offsets
text_draw_list.push_back(Magick::DrawableText(0, 200, "HelloWorld!"));
text_draw_list.push_back(Magick::DrawableStrokeColor(color));
text_draw_list.push_back(Magick::DrawableFillColor(color));
image.draw(text_draw_list);
Метод 1 вычисляет наилучшие смещения, учитывая гравитацию, но не имеет никакой упаковки слов, если текст выходит за пределы им возраст.
Метод 2 имеет проблему метода 1 плюс он предполагает, что правильные смещения рассчитаны, чтобы текст был записан в правильном положении.
Как добавить автоматическую перенос слов к одному из двух методов, но предпочтительно к методу 1?
P.S: ImageMagick имеет автоматический перенос слов с помощью титров варианта, но я не мог найти Caption в Magick ++.
Редактировать: Угловое управление границами на основе размера шрифта.
Magick::Image image(Magick::Geometry(800,800),Magick::Color("white"));
Magick::Color color(0,0,0,0);
image.font("Waree");
image.fontPointsize(36);
image.strokeColor(color);
image.fillColor(color);
std::string txt = "HelloWorld!";
Magick::TypeMetric typeMetrics;
double fontSize = 36;
image.fontTypeMetrics(txt, &typeMetrics);
while(fontSize > 0)
{
if(typeMetrics.textWidth() >= image.columns() || typeMetrics.textHeight() >= image.rows())
{
fontSize--;
image.fontTypeMetrics(txt, &typeMetrics);
}
}
image.annotate(txt, NorthWestGravity);
Великий ответ еще раз! Почему вы все это знаете?!?! Я добавил грязный пограничный контроль, основанный на размере шрифта, поскольку я не мог найти перенос слов. – zindarod
Рад, что это было полезно, но настоящий кредит принадлежит Энтони Тиссену и его удивительной [работе] (http://www.imagemagick.org/Usage/). – emcconville