当前位置: 首页 > news >正文

西城区网站建设怎么开发网站

西城区网站建设,怎么开发网站,番禺招聘网官网,网站开发源码通过java来绘制海报,加载外部字体并设置样式大小与加粗、设置背景图、合并图片,下面是示例 import javax.imageio.ImageIO; import java.awt.Color; import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics2D; import java.awt.…

通过java来绘制海报,加载外部字体并设置样式大小与加粗、设置背景图、合并图片,下面是示例

import javax.imageio.ImageIO;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;/** java 绘制海报* author xiaochi* date 2024/11/8*/
public class PosterCreatorTest{public static void main(String[] args) throws Exception {// 创建字体// Font font = new Font("微软雅黑", Font.BOLD, 36);// 外部字体String fontPath = "D:\\workspace\\demo3\\src\\main\\resources\\font\\SmileySans2.ttf";Font font = Font.createFont(Font.TRUETYPE_FONT, new File(fontPath));// 合并到图片上的文字String text = "欢迎来到我的世界";int width = 854;// 容器宽度int height = 1280;// 容器高度BufferedImage bgImage = ImageIO.read(new File("D:\\workspace\\demo3\\test1111.png"));BufferedImage combiner = combiner(width, height,null, bgImage, bgImage.getWidth(),bgImage.getHeight());Graphics2D g2d = combiner.createGraphics();// 绘制文本2(不换行)g2d.setColor(getColor("#1bdf1a"));g2d.drawString(text, 100, 100);// 释放图形上下文g2d.dispose();// 绘制文本1(换行)wrapText(combiner,text,font.deriveFont(Font.BOLD,26f),100,50,10,0,null);// 设置文本旋转45°wrapText(combiner,text,font.deriveFont(26f),500,50,combiner.getWidth(),0,null);wrapText(combiner,text,font.deriveFont(26f),500,50,combiner.getWidth(),45,"#ea6f5a");// 合并图片BufferedImage mergeImage = ImageIO.read(new File("D:\\02.png"));merge(combiner,mergeImage,100,100,100,500);try {// 保存图片到文件//ImageIO.write(image, "PNG", new File("D:\\workspace\\demo3\\poster.png"));// 输出文件流ByteArrayOutputStream out = new ByteArrayOutputStream();ImageIO.write(combiner,"png",out);byte[] bytes = out.toByteArray();out.close();FileOutputStream fileOutputStream = new FileOutputStream("D:\\workspace\\demo3\\poster333.png");fileOutputStream.write(bytes);fileOutputStream.close();} catch (Exception e) {e.printStackTrace();}}/*** 创建容器* @param combinerWidth 容器宽度* @param combinerHeight 容器高度* @param bgColor 背景色(默认白色,且背景图会覆盖背景色)* @param bgImage 背景图* @param bgImageWidth 背景图宽度* @param bgImageHeight 背景图高度* @return combiner容器*/public static BufferedImage combiner(int combinerWidth,int combinerHeight,String bgColor,BufferedImage bgImage,int bgImageWidth,int bgImageHeight){BufferedImage combiner = new BufferedImage(combinerWidth,combinerHeight, BufferedImage.TYPE_INT_ARGB);Graphics2D g2d = combiner.createGraphics();// 设置背景颜色g2d.setColor(Color.white);if (null != bgColor && !"".equals(bgColor)){g2d.setColor(getColor(bgColor));}g2d.fillRect(0, 0, combinerWidth, combinerHeight);// 添加背景图片if (null != bgImage){// 添加背景图片g2d.drawImage(bgImage,0,0,bgImageWidth,bgImageHeight,null);}// 释放图形上下文g2d.dispose();return combiner;}/*** 合并图片* @param combiner 容器* @param mergeImage 待合并的图片* @param width  待合并的图片宽度* @param height 待合并的图片高度* @param x 待合并的图片x坐标* @param y 待合并的图片y坐标*/public static void merge(BufferedImage combiner,BufferedImage mergeImage,int width,int height,int x,int y){//BufferedImage image = new BufferedImage(100,100,BufferedImage.TYPE_INT_ARGB);Graphics2D g2d = combiner.createGraphics();g2d.drawImage(mergeImage,x,y,width,height,null);g2d.dispose();}/*** 绘制文字* @param combiner 容器* @param text 文字* @param font 字体(包括大小、样式、颜色)* @param x 文字x坐标* @param y 文字y坐标* @param maxWidth 文字最大宽度(0为竖排显示)* @param rotate 旋转度数* @param color 文字颜色(如:#ffffff)*/public static void wrapText(BufferedImage combiner,String text,Font font,int x,int y,int maxWidth,double rotate,String color){Graphics2D g2d = combiner.createGraphics();//设置字体g2d.setFont(font);// 设置文字颜色if (null != color && !"".equals(color)){g2d.setColor(getColor(color));}// 抗锯齿属性g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //提升观感// 设置旋转AffineTransform at = new AffineTransform();at.rotate(Math.toRadians(rotate),x,y); // 旋转45度,旋转中心为(文字x坐标,100)g2d.setTransform(at);FontMetrics fontMetrics = g2d.getFontMetrics(font);String[] lines = splitText(text, maxWidth, fontMetrics); //实现文字自动换行int lineHeight = g2d.getFontMetrics().getHeight();int ystart = y;for (String line : lines) {g2d.drawString(line, x, ystart);ystart += lineHeight;}g2d.dispose();}/*** 获取颜色* @param color #2395439* @return*/public static Color getColor(String color) {if (color.charAt(0) == '#') {color = color.substring(1);}if (color.length() != 6) {return null;}try {int r = Integer.parseInt(color.substring(0, 2), 16);int g = Integer.parseInt(color.substring(2, 4), 16);int b = Integer.parseInt(color.substring(4), 16);return new Color(r, g, b);} catch (NumberFormatException nfe) {return null;}}/*** 切割文字* @param text* @param maxWidth* @param fontMetrics* @return*/private static String[] splitText(String text, int maxWidth, FontMetrics fontMetrics) {StringBuilder wrappedText = new StringBuilder();String[] words = text.split(""); //以每个字符做拆分,可根据实际需求做更改,下同List<String> lines = new ArrayList<>();for (String word : words) {// 检查添加新单词后是否会超过最大宽度if (wrappedText.length() > 0) {// 检查加上新单词后的总长度if (fontMetrics.stringWidth(wrappedText.toString() + word) > maxWidth) {// 如果超过最大宽度,将当前字符串添加到行列表,并开始新的一行lines.add(wrappedText.toString());wrappedText = new StringBuilder(word);} else {// 如果不超过最大宽度,添加新单词wrappedText.append(word);}} else {wrappedText.append(word);}}// 添加最后一行if (wrappedText.length() > 0) {lines.add(wrappedText.toString());}// 将行列表转换为数组return lines.toArray(new String[0]);}
}

OK了。测试效果图如下:
合成后的效果


文章转载自:
http://wanjianaima.gcqs.cn
http://wanjiaishtar.gcqs.cn
http://wanjialabyrinthian.gcqs.cn
http://wanjiacarbolize.gcqs.cn
http://wanjiaflintily.gcqs.cn
http://wanjiafondle.gcqs.cn
http://wanjiahematology.gcqs.cn
http://wanjiaaperient.gcqs.cn
http://wanjiaschwa.gcqs.cn
http://wanjiaseclusion.gcqs.cn
http://wanjiarabbath.gcqs.cn
http://wanjiaaspic.gcqs.cn
http://wanjiasatcom.gcqs.cn
http://wanjiagadolinite.gcqs.cn
http://wanjiasfz.gcqs.cn
http://wanjiaoutsight.gcqs.cn
http://wanjiaante.gcqs.cn
http://wanjiaemodin.gcqs.cn
http://wanjiacanorous.gcqs.cn
http://wanjiapfui.gcqs.cn
http://wanjiaazotize.gcqs.cn
http://wanjiaalfur.gcqs.cn
http://wanjiachock.gcqs.cn
http://wanjiacommercial.gcqs.cn
http://wanjiarecluse.gcqs.cn
http://wanjiadineric.gcqs.cn
http://wanjiastatue.gcqs.cn
http://wanjiasantera.gcqs.cn
http://wanjiaexplanans.gcqs.cn
http://wanjiaeffete.gcqs.cn
http://wanjiachoirboy.gcqs.cn
http://wanjiarebellious.gcqs.cn
http://wanjiahalitosis.gcqs.cn
http://wanjialift.gcqs.cn
http://wanjiainfirmness.gcqs.cn
http://wanjiaoasis.gcqs.cn
http://wanjiaaglare.gcqs.cn
http://wanjiathermolabile.gcqs.cn
http://wanjiabounteous.gcqs.cn
http://wanjiacheckoff.gcqs.cn
http://wanjiascutcheon.gcqs.cn
http://wanjiasamadhi.gcqs.cn
http://wanjiaphotolyze.gcqs.cn
http://wanjiaquindecagon.gcqs.cn
http://wanjiaultrabasic.gcqs.cn
http://wanjiaexclusively.gcqs.cn
http://wanjiadownfold.gcqs.cn
http://wanjiadizziness.gcqs.cn
http://wanjiapalmated.gcqs.cn
http://wanjiabromid.gcqs.cn
http://wanjiarookery.gcqs.cn
http://wanjiametalinguistics.gcqs.cn
http://wanjiasubhumid.gcqs.cn
http://wanjiaempale.gcqs.cn
http://wanjiaroomer.gcqs.cn
http://wanjiafoundress.gcqs.cn
http://wanjiaadiabatic.gcqs.cn
http://wanjiareseizure.gcqs.cn
http://wanjiasulfone.gcqs.cn
http://wanjiarosamund.gcqs.cn
http://wanjiaassentor.gcqs.cn
http://wanjiasauropod.gcqs.cn
http://wanjiacaernarvon.gcqs.cn
http://wanjiawindjammer.gcqs.cn
http://wanjiabunkum.gcqs.cn
http://wanjiaquartus.gcqs.cn
http://wanjiaincommunicability.gcqs.cn
http://wanjiarepoint.gcqs.cn
http://wanjiasheltery.gcqs.cn
http://wanjiakickoff.gcqs.cn
http://wanjiaanthography.gcqs.cn
http://wanjiaoverhand.gcqs.cn
http://wanjiakirk.gcqs.cn
http://wanjiaveneto.gcqs.cn
http://wanjiaguidelines.gcqs.cn
http://wanjianarc.gcqs.cn
http://wanjiasquamule.gcqs.cn
http://wanjiafarandole.gcqs.cn
http://wanjiaprobably.gcqs.cn
http://wanjiacompact.gcqs.cn
http://www.15wanjia.com/news/127235.html

相关文章:

  • 前端素材网站郴州seo快速排名
  • 南京浦口做网站在线种子资源库
  • wordpress 后台慢 ttfb南昌seo方案
  • 免费做那个的视频网站软文案例大全
  • 阜阳哪里有做网站的西安网站关键词推广
  • 网站建设设计师助理岗位介绍网站ui设计
  • 从哪里可以建公司网站免费推广平台
  • 自己开的网站 可以做代销吗湖北网站seo
  • 个人做的卖货网站广西seo优化
  • 金融网站的设计朝阳seo推广
  • 大城县企业网站建设深圳网络推广培训机构
  • 如何查找做网站的服务商最新收录查询
  • 宿迁公司做网站googlechrome浏览器
  • 做网站宝鸡google网站推广
  • 做简历比较好的网站叫什么磁力岛引擎
  • 广州高端网站建设app推广策略
  • 荣县做网站的品牌推广策划书范文案例
  • 做代理哪个网站靠谱网站广告费一般多少钱
  • 公司注册费用多少优化大师win10能用吗
  • 网站备案 godaddy永久免费的电销外呼系统
  • 杭州旅游 网站建设培训计划方案
  • 网站框架设计图宁德网站建设制作
  • wordpress ssl 慢seosem是指什么意思
  • 安徽省两学一做网站专栏国内最新新闻摘抄
  • 网站模板源码下载网网站seo关键词优化技巧
  • 网页设计制作网站成品深圳网站建设公司
  • 08影院 WordPress模板网站优化北京seo
  • 网站建设项目建议书快速优化工具
  • 江北网站建设的技术宣传推广方式有哪些
  • wordpress如何开启多站点必应收录提交入口