久坐電腦前容易頸椎僵硬?網路上流傳的「頸椎矯正圖」利用文字螺旋排版強迫眼球轉動,進而帶動頸部活動。本文展示如何用 Java 2D 繪圖 API 自動將長文字轉換成螺旋狀、垂直、旋轉等多種視覺效果的圖片,原理同樣適用於小說生成圖片、水印製作等場景。
程式會載入背景圖 back.png,將輸入文字按指定字型、大小、顏色繪製成單字圖片,再依 isRow 參數決定橫向或直向排版,並可透過 d 旗標反轉字序,最後以 AffineTransform 旋轉 90/180/360 度組合成最終畫面。

RenderingHints hints = new RenderingHints(
RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
hints.put(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
hints.put(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
graphics2d.setRenderingHints(hints);
graphics2d.drawString(String.valueOf(message), 0, size - 3);
啟用分數度量與抗鋸齒,確保小字體清晰銳利。
public static BufferedImage rotateImage(BufferedImage image, int angdeg, boolean d) {
Graphics2D g2d = img.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.rotate(d ? -Math.toRadians(angdeg) : Math.toRadians(angdeg), w/2, h/2);
g2d.drawImage(image, 0, 0, null);
g2d.dispose();
return img;
}
以雙線性插值旋轉,d 控制順/逆時針,中心點為圖片幾何中心。
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);
g2d.setComposite(ac);
g2d.drawImage(backImage, 0, 0, null);
半透明疊加背景圖,提升文字可讀性。
MessageImage extends Canvas:主畫布,建構子接收長字串自動排版繪製。createImageMessages():將字串拆解為單字圖片陣列,依橫/直向拼貼。createImageMessage():單字繪製、旋轉、翻轉。main():示範啟動視窗,載入一段諷刺程式人生的長文生成矯正圖。同樣邏輯可用於:
本文轉載自「Java究竟怎麼玩」博客,原文地址:https://cping1982.blog.51cto.com/601635/116597