福州网站制作工具,西部数码 网站建设,星沙网站建设,网站建设基本步骤包括哪些精美的海报通常都是由UI进行精心设计的#xff0c;现在有100 件商品需要进行宣传推广#xff0c;如果每个商品都出一张图显然是不合理的#xff0c;且商品信息各异。因此需要通过代码的形式生成海报。对此#xff0c;我也对我宣传一波#xff0c;企图实现我一夜暴富的伟大…精美的海报通常都是由UI进行精心设计的现在有100 件商品需要进行宣传推广如果每个商品都出一张图显然是不合理的且商品信息各异。因此需要通过代码的形式生成海报。对此我也对我宣传一波企图实现我一夜暴富的伟大宏图。 生成的海报放在最前面扫描下方二维码手机上更好的实时阅读小咸鱼的技术窝。 代码实现
需要的依赖 dependencygroupIdcom.google.zxing/groupIdartifactIdcore/artifactIdversion3.4.0/version/dependencydependencygroupIdcommons-io/groupIdartifactIdcommons-io/artifactIdversion2.4/version/dependencydependencygroupIdcom.google.zxing/groupIdartifactIdjavase/artifactIdversion3.4.0/version/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.9/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.9.5/version/dependency完整Java 代码
需要你准备一张背景图、封面图、二维码图、以及对应的文字描述我这里全部搞成静态的了。各位织入自己的业务即可。用到的技术是 Graphics2D。我们使用的时候只需要知道三个概念就行。
x 坐标横坐标y 坐标纵坐标width坐标点向右的宽度height坐标点向下的高度
为了保证图片的美观性你需要去向 ui 询问字体的配色参数、图片的尺寸参数。然后进行排版。里面需要自己去理解一下都是些数学加减法的计算。这里不过多 bb。本文海报用到的图片尺寸是 610*633 的。
public class ImageUtils {public static String createPoster(String content) throws Exception {if (content.length() 300) {content StringUtils.substring(content, 0, 300) ...;}//封面File petImg new File(/Users/zhangzixing/Desktop/temp/fm.jpg);//二维码图片File qrCodeImg new File(/Users/zhangzixing/Desktop/temp/ewm.png);//背景地址URL url ImageUtils.class.getResource(/image/bj1.jpg);File fileBg FileUtils.toFile(url);FileInputStream fis new FileInputStream(fileBg);Image srcImg ImageIO.read(fis);BufferedImage bufferedImage new BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null),BufferedImage.TYPE_INT_RGB);int width bufferedImage.getWidth();int height bufferedImage.getHeight();Graphics2D g bufferedImage.createGraphics();g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g.drawImage(srcImg.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null);//内容Graphics2DUtils.drawString(g, Color.decode(#323232),new Font(PingFang SC Bold,Font.BOLD, 30),content,100, 640, 500, 30, 10, false);BufferedImage read ImageIO.read(qrCodeImg);//扫一扫Graphics2DUtils.drawString(g, Color.decode(#323232),new Font(PingFang SC Bold, Font.BOLD, 70),扫一扫,width - read.getWidth() / 2 - 200, height - 70,width - 20,20, 10, false);//二维码g.drawImage(ImageIO.read(qrCodeImg), width - read.getWidth() - 100, height - read.getHeight() - 150, read.getWidth(), read.getHeight(), null);//封面g.drawImage(ImageIO.read(petImg), 20, 20, width - 40, height - 900, null);g.dispose();ByteArrayOutputStream os new ByteArrayOutputStream();ImageIO.write(bufferedImage, jpg, os);String encodeStr Base64.getEncoder().encodeToString(os.toByteArray());FileUtils.writeByteArrayToFile(new File(/Users/zhangzixing/Desktop/temp/海报.jpg), os.toByteArray());fis.close();os.close();return encodeStr;}//610*633public static void main(String[] args) throws Exception {System.err.println(createPoster(22 届本科毕业生擅长Spring 全家桶源码、Mybatis 源码、常见设计模式使用、Redis 各大数据类型使用、Java 常用并发包源码、Spring Cloud 全家桶、RocketMq 使用));}
}用到的工具类
import org.apache.commons.lang3.StringUtils;import java.awt.*;
import java.util.ArrayList;public final class Graphics2DUtils {/*** 向画布上写文字** param g Graphics2D对象* param color 颜色* param font 字体* param content 内容* param x 坐标x* param y 坐标y*/public static void drawString(Graphics2D g, Color color, Font font, String content, float x, float y) {g.setColor(color);g.setFont(font);g.drawString(content, x, y);}/*** 向画布上写多行文字文字自动居中** param g Graphics2D对象* param color 颜色* param font 字体* param content 内容* param x 坐标X* param y 坐标y* param width 画布宽度* param lineWordNum 每行字数* param linePadding 行间距* param center 是否居中*/public static void drawString(Graphics2D g, Color color, Font font, String content, float x, float y, int width, int lineWordNum, int linePadding, boolean center) {int num content.length();ArrayListString contents new ArrayListString();if (num lineWordNum) {contents.add(content);} else {for (int i 0; i num; i lineWordNum) {contents.add(StringUtils.substring(content, i, i lineWordNum));}}for (int i 0; i contents.size(); i) {String s contents.get(i);if (i ! 0) {y linePadding font.getSize();}if (center) {drawCenterString(g, color, font, s, width, y);} else {drawString(g, color, font, s, x, y);}}}/*** 向画布上写多行文字文字自动居中** param g Graphics2D对象* param color 颜色* param font 字体* param content 内容* param y 坐标y* param width 画布宽度* param lineWordNum 每行字数* param linePadding 行间距*/public static void drawCenterString(Graphics2D g, Color color, Font font, String content, float y, int width, int lineWordNum, int linePadding) {drawString(g, color, font, content, 0, y, width, lineWordNum, linePadding, true);}/*** 向画布上写文字自动居中** param g Graphics2D对象* param color 颜色* param font 字体* param content 内容* param width 画布宽度* param y 坐标y*/public static void drawCenterString(Graphics2D g, Color color, Font font, String content, int width, float y) {int textWidth getStringWidth(g, font, content);drawString(g, color, font, content, (width - textWidth) / 2, y);}/*** 获取字符串内容的宽度** param g Graphics2D对象* param font 字体* param content 内容* return*/public static int getStringWidth(Graphics2D g, Font font, String content) {FontMetrics fm g.getFontMetrics(font);//获取字符串宽度return fm.stringWidth(content);}
}总结
关注不迷路这里是小咸鱼的技术窝 文章转载自: http://www.morning.ykklw.cn.gov.cn.ykklw.cn http://www.morning.snnwx.cn.gov.cn.snnwx.cn http://www.morning.rlbg.cn.gov.cn.rlbg.cn http://www.morning.fchkc.cn.gov.cn.fchkc.cn http://www.morning.lpcct.cn.gov.cn.lpcct.cn http://www.morning.fkmqg.cn.gov.cn.fkmqg.cn http://www.morning.mszls.cn.gov.cn.mszls.cn http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn http://www.morning.rntyn.cn.gov.cn.rntyn.cn http://www.morning.rwpfb.cn.gov.cn.rwpfb.cn http://www.morning.lkxzb.cn.gov.cn.lkxzb.cn http://www.morning.mhnr.cn.gov.cn.mhnr.cn http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.xqspn.cn.gov.cn.xqspn.cn http://www.morning.nqmhf.cn.gov.cn.nqmhf.cn http://www.morning.pzpj.cn.gov.cn.pzpj.cn http://www.morning.qwbht.cn.gov.cn.qwbht.cn http://www.morning.w58hje.cn.gov.cn.w58hje.cn http://www.morning.glbnc.cn.gov.cn.glbnc.cn http://www.morning.ffptd.cn.gov.cn.ffptd.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.qlznd.cn.gov.cn.qlznd.cn http://www.morning.bzlfw.cn.gov.cn.bzlfw.cn http://www.morning.nrcbx.cn.gov.cn.nrcbx.cn http://www.morning.bpmtl.cn.gov.cn.bpmtl.cn http://www.morning.jbxmb.cn.gov.cn.jbxmb.cn http://www.morning.qxltp.cn.gov.cn.qxltp.cn http://www.morning.kzrg.cn.gov.cn.kzrg.cn http://www.morning.thbkc.cn.gov.cn.thbkc.cn http://www.morning.nfmlt.cn.gov.cn.nfmlt.cn http://www.morning.pghfy.cn.gov.cn.pghfy.cn http://www.morning.bmzxp.cn.gov.cn.bmzxp.cn http://www.morning.kjrlp.cn.gov.cn.kjrlp.cn http://www.morning.nmfwm.cn.gov.cn.nmfwm.cn http://www.morning.ybhjs.cn.gov.cn.ybhjs.cn http://www.morning.pjwrl.cn.gov.cn.pjwrl.cn http://www.morning.jxhlx.cn.gov.cn.jxhlx.cn http://www.morning.qfgwx.cn.gov.cn.qfgwx.cn http://www.morning.gidmag.com.gov.cn.gidmag.com http://www.morning.ljyqn.cn.gov.cn.ljyqn.cn http://www.morning.lgmty.cn.gov.cn.lgmty.cn http://www.morning.ryfpx.cn.gov.cn.ryfpx.cn http://www.morning.srzhm.cn.gov.cn.srzhm.cn http://www.morning.fhjnh.cn.gov.cn.fhjnh.cn http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn http://www.morning.qqxmj.cn.gov.cn.qqxmj.cn http://www.morning.rljr.cn.gov.cn.rljr.cn http://www.morning.gyxwh.cn.gov.cn.gyxwh.cn http://www.morning.tldhq.cn.gov.cn.tldhq.cn http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.yrjkz.cn.gov.cn.yrjkz.cn http://www.morning.gbcxb.cn.gov.cn.gbcxb.cn http://www.morning.tfpbm.cn.gov.cn.tfpbm.cn http://www.morning.pndw.cn.gov.cn.pndw.cn http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn http://www.morning.mwkwg.cn.gov.cn.mwkwg.cn http://www.morning.ymsdr.cn.gov.cn.ymsdr.cn http://www.morning.dighk.com.gov.cn.dighk.com http://www.morning.mbhdl.cn.gov.cn.mbhdl.cn http://www.morning.kpcxj.cn.gov.cn.kpcxj.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn http://www.morning.ljqd.cn.gov.cn.ljqd.cn http://www.morning.cqwb25.cn.gov.cn.cqwb25.cn http://www.morning.cdrzw.cn.gov.cn.cdrzw.cn http://www.morning.bpknt.cn.gov.cn.bpknt.cn http://www.morning.nkpml.cn.gov.cn.nkpml.cn http://www.morning.sjwiki.com.gov.cn.sjwiki.com http://www.morning.zydr.cn.gov.cn.zydr.cn http://www.morning.4q9h.cn.gov.cn.4q9h.cn http://www.morning.ysckr.cn.gov.cn.ysckr.cn http://www.morning.sqqkr.cn.gov.cn.sqqkr.cn http://www.morning.nzmw.cn.gov.cn.nzmw.cn http://www.morning.ylkkh.cn.gov.cn.ylkkh.cn http://www.morning.fdsbs.cn.gov.cn.fdsbs.cn http://www.morning.jcypk.cn.gov.cn.jcypk.cn http://www.morning.qgjwx.cn.gov.cn.qgjwx.cn http://www.morning.pgcmz.cn.gov.cn.pgcmz.cn http://www.morning.gkfwp.cn.gov.cn.gkfwp.cn