Я пытался добавить текстовый водяной знак на изображения, используя тег imageDrawText в CF10.
вот код тестирования
<cfset img = imageNew("",500,500,"rgb","blue")>
<cfset text = "This is just another test! See if text fits the imgage...">
<cfset buffered = ImageGetBufferedImage(img)>
<cfset context = buffered.getGraphics().getFontRenderContext()>
<cfset Font = createObject("java", "java.awt.Font")>
<cfset textFont = Font.init( "Arial", Font.BOLD, javacast("int", 40))>
<cfset textLayout = createObject("java", "java.awt.font.TextLayout").init( text, textFont, context)>
<cfset textBounds = textLayout.getBounds()>
<cfset textWidth = textBounds.getWidth()>
<cfset textHeight = textBounds.getHeight()>
<cfset attr = { font="Arial", size="40", style="bold" }>
<cfset x = (ImageGetWidth(img) / 2 - textWidth / 2)>
<cfset y = (ImageGetHeight(img) / 2 + textHeight / 2)>
<cfset imageSetDrawingColor(img,"black")>
<cfset imageDrawText(img,text, x, y, attr)>
<cfimage action="writeToBrowser" source="#img#">
проблема в том, что я не знаю, как разбивать строки и центрировать текст...
слева — то, что выдает код, а справа — то, что я хотел бы получить
Важно отметить, что размер шрифта и количество символов будут варьироваться от одного изображения к другому, и это основная причина, по которой я не знаю, как правильно их считать.
Моя первоначальная идея заключалась в том, чтобы подсчитать символы и посмотреть, сколько из них поместится в ширину изображения, хотя это невозможно по вышеуказанным причинам. Итак, есть ли для этого однострочный или какая-то математическая функция, необходимая для ручного разделения ширины текста и разрыва строк? также, возможно, мне следует использовать дополнительные теги или теги x imageDrawText для отображения каждой строки отдельно, хотя все же нужно как-то разделить ее!