zoukankan      html  css  js  c++  java
  • 小程序生成商品分享二维码海报解决方案和实现方式JAVA

    使用技术:  Graphics , 七牛云 , 微信sdk(github上非常出名的wxjava,地址https://github.com/Wechat-Group/WxJava/)
    直接上干货代码,每一步都有详细注释, TODO 的地址修改为自己的信息,一个合格的程序员懂得灵活运用代码. 如果想实现画入文字并且更具 自动换行,可根据代码自行优化(已经实现自动换行).

       @Test
        public void share() throws Exception {
            //创建图片
            BufferedImage img = new BufferedImage(750, 1334, BufferedImage.TYPE_INT_RGB);
            //开启画图
            Graphics g = img.getGraphics();
            //背景 -- 读取互联网图片
            BufferedImage back  = ImageIO.read(new URL("填写海报的背景图片链接"));
            g.drawImage(back.getScaledInstance(750, 1334, Image.SCALE_DEFAULT), 0, 0, null); // 绘制缩小后的图
            //商品  banner图
            //读取互联网图片
            BufferedImage priductUrl = ImageIO.read(new URL("填写自己的banner图,线上链接")); //TODO
            g.drawImage(priductUrl.getScaledInstance(690,516,Image.SCALE_DEFAULT),29,61,null);
            //文案标题
            g.setFont(new Font("微软雅黑", Font.BOLD, 34));
            g.setColor(new Color(29,29,29));
            //绘制文字
            g.drawString("填写文案标题", 31, 638);//TODO
            //文案
            g.setFont(new Font("微软雅黑", Font.PLAIN, 30));
            g.setColor(new Color(47,47,47));
            int fontlen = getWatermarkLength("填写文内容", g);//TODO
            //文字长度相对于图片宽度应该有多少行
            int line = fontlen / (back.getWidth() - 90);
            //高度
            int y = back.getHeight() - (line + 1) * 30 - 500;
            //文字叠加,自动换行叠加
            int tempX = 32;
            int tempY = y;
            //单字符长度
            int tempCharLen = 0;
            //单行字符总长度临时计算
            int tempLineLen = 0;
            StringBuffer sb =new StringBuffer();
            for(int i=0; i < "填写文内容".length(); i++) {//TODO
                char tempChar = "填写文内容".charAt(i);//TODO
                tempCharLen = getCharLen(tempChar, g);
                tempLineLen += tempCharLen;
                if(tempLineLen >= (back.getWidth()-90)) {
                    //长度已经满一行,进行文字叠加
                    g.drawString(sb.toString(), tempX, tempY + 50);
                    //清空内容,重新追加
                    sb.delete(0, sb.length());
                    //每行文字间距50
                    tempY += 50;
                    tempLineLen =0;
                }
                //追加字符
                sb.append(tempChar);
            }
            //最后叠加余下的文字
            g.drawString(sb.toString(), tempX, tempY + 50);
     
            //价格背景
            //读取互联网图片
            BufferedImage bground  = ImageIO.read(new URL("填写自己的价格背景图,七牛图片链接"));//TODO
            // 绘制缩小后的图
            g.drawImage(bground.getScaledInstance(160, 40, Image.SCALE_DEFAULT), 30, 1053, null);
     
            //限时促销价
            g.setFont(new Font("微软雅黑", Font.PLAIN, 24));
            g.setColor(new Color(255,255,255));
            g.drawString("限时促销价", 50, 1080);
     
            //价格
            g.setFont(new Font("微软雅黑", Font.PLAIN, 50));
            g.setColor(new Color(249,64,64));
            g.drawString("¥" + "填写商品的价格", 29, 1162);//TODO
     
            //原价
            g.setFont(new Font("微软雅黑", Font.PLAIN, 36));
            g.setColor(new Color(171,171,171));
            String price = "¥" + "填写商品的原价";//TODO
            g.drawString(price, 260, 1160);
            g.drawLine(250,1148,260+150,1148);
     
            //商品名称
            g.setFont(new Font("微软雅黑", Font.PLAIN, 32));
            g.setColor(new Color(29,29,29));
            g.drawString("填写商品名称", 30, 1229);//TODO
     
            //生成二维码返回链接
            String url = "";//TODO
            //读取互联网图片
            BufferedImage qrCode  = ImageIO.read(new URL(url));
            // 绘制缩小后的图
            g.drawImage(qrCode.getScaledInstance(174, 174, Image.SCALE_DEFAULT), 536, 1057, null);
     
            //二维码字体
            g.setFont(new Font("微软雅黑", Font.PLAIN, 25));
            g.setColor(new Color(171,171,171));
            //绘制文字
            g.drawString("扫描或长按小程序码", 515, 1260);
     
            g.dispose();
            //保存到本地 生成文件名字
            String iconKey = UUID.randomUUID().toString() +".png"; //TODO
            //先将画好的海报写到本地
            String picUrl = "填写自己电脑的路径" + iconKey; // TODO
            File file = new File(picUrl);
            ImageIO.write(img, "jpg",file);
            //再将file上传至七牛返回链接存入数据库
            //end
            // TODO
            }
     
        /**
         * 获取水印文字总长度
         *@paramwaterMarkContent水印的文字
         *@paramg
         *@return水印文字总长度
         */
        public int getWatermarkLength(String waterMarkContent, Graphics g) {
            return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(),0, waterMarkContent.length());
        }
        public int getCharLen(char c, Graphics g) {
            return g.getFontMetrics(g.getFont()).charWidth(c);
        }
     

  • 相关阅读:
    git add 添加错文件 撤销
    ArcMap中对失量数据将具有相同的字段的元素进行合并
    win10系统黑屏无法显示桌面解决
    C#
    git push的时候报错: Out of memory, malloc failed (tried to allocate 82037333 bytes)
    在abp core中出现运行项目时EF获取到的appsetting.json或者appsettings.Production.json中的连接字符串为空
    navicat连接数据库报错:未发现数据源名称并且未指定默认驱动程序
    HDU
    HDU
    HDU
  • 原文地址:https://www.cnblogs.com/tomingto/p/12177002.html
Copyright © 2011-2022 走看看