[Java生成商品的海报图片 ]

这篇具有很好参考价值的文章主要介绍了[Java生成商品的海报图片 ]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言: 

生成商品海报图片需要处理两个问题:

依赖:

编写生成海报代码

另一个方法:

补全上面的main测试方法:



前言: 

     你知道的 这只是一个简单笔记......

生成商品海报图片需要处理两个问题:

1)将文字和二维码合成为一张图片;

2)将图片保存到文件。

依赖:

其中,com.google.zxing是一个二维码处理库,com.itextpdf是一个PDF处理库,org.apache.commons.lang3是一个常用的Java工具库。这些库可以通过Maven中央仓库进行下载和引用。

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.4.1</version>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>
  1. 编写生成海报代码

生成海报代码可以分为两个部分,分别处理文字和二维码。

处理文字

处理文字需要使用iText库,通过创建PDF文档、设置字体、添加文本、设置位置等方式生成一个带有文字的PDF页面,然后将PDF页面转换为图片。

代码如下:

import com.itextpdf.text.*;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.commons.lang3.StringUtils;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class PosterGenerator {
    private static final String FONT_PATH = "src/main/resources/msyh.ttf";

    /**
     * 生成带有文字的海报图片
     *
     * @param text      文字内容
     * @param imageSize 图片大小
     * @param fontName  字体名称
     * @param fontSize  字体大小
     * @return 生成的海报图片
     */
    public static BufferedImage generateTextPoster(String text, int imageSize, String fontName, float fontSize) throws DocumentException, IOException {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new ByteArrayOutputStream());
        document.open();
        PdfContentByte contentByte = writer.getDirectContent();
        Font font = FontFactory.getFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, fontSize);
        Phrase phrase = new Phrase(text, font);
        ColumnText.showTextAligned(contentByte, Element.ALIGN_CENTER, phrase, imageSize / 2, imageSize / 2, 0);
        document.close();
        ByteArrayOutputStream baos = (ByteArrayOutputStream) writer.getDirectContent().getOutputStream();
        byte[] pdfBytes = baos.toByteArray();
        return convertPDFToImage(pdfBytes, imageSize, imageSize);
    }

    private static BufferedImage convertPDFToImage(byte[] pdfBytes, int width, int height) throws IOException {
        Image image = Image.getInstance(pdfBytes);
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = bufferedImage.createGraphics();
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, width, height);
        graphics.drawImage(image, 0, 0, width, height, null);
        graphics.dispose();
        return bufferedImage;
    }
}
  • 代码中,generateTextPoster方法用于生成带有文字的海报图片。首先创建一个PDF文档,设置字体、添加文本、设置位置等,然后将PDF文档转换为图片。convertPDFToImage方法用于将PDF文档转换为BufferedImage类型的图片。

  • 处理二维码

    处理二维码需要使用Google的ZXing库,通过创建二维码内容、设置参数等方式生成二维码图片。

代码如下:

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class PosterGenerator {

    /**
     * 生成带有文字和二维码的海报图片
     *
     * @param text         文字内容
     * @param imageSize    图片大小
     * @param fontName     字体名称
     * @param fontSize     字体大小
     * @param qrCodeString 二维码内容
     * @param qrCodeSize   二维码大小
     * @param qrCodeX      二维码X坐标
     * @param qrCodeY      二维码Y坐标
     * @return 生成的海报图片
     */
    public static BufferedImage generatePoster(String text, int imageSize, String fontName, float fontSize,
                                                String qrCodeString, int qrCodeSize, int qrCodeX, int qrCodeY) throws Exception {
        BufferedImage textImage = generateTextPoster(text, imageSize, fontName, fontSize);
        BufferedImage qrCodeImage = generateQRCode(qrCodeString, qrCodeSize);
        Graphics2D graphics = textImage.createGraphics();
        graphics.drawImage(qrCodeImage, qrCodeX, qrCodeY, null);
        graphics.dispose();
        return textImage;
    }

    /**
     * 生成带有文字的海报图片
     *
     * @param text      文字内容
     * @param imageSize 图片大小
     * @param fontName  字体名称
     * @param fontSize  字体大小
     * @return 生成的海报图片
     */
    public static BufferedImage generateTextPoster(String text, int imageSize, String fontName, float fontSize) throws Exception {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new ByteArrayOutputStream());
        document.open();
        PdfContentByte contentByte = writer.getDirectContent();
        Font font = FontFactory.getFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, fontSize);
        Phrase phrase = new Phrase(text, font);
        ColumnText.showTextAligned(contentByte, Element.ALIGN_CENTER, phrase, imageSize / 2, imageSize / 2, 0);
        document.close();
        ByteArrayOutputStream baos = (ByteArrayOutputStream) writer.getDirectContent().getOutputStream();
        byte[] pdfBytes = baos.toByteArray();
        return convertPDFToImage(pdfBytes, imageSize, imageSize);
    }

    /**
     * 生成二维码图片
     *
     * @param qrCodeString 二维码内容
     * @param size         二维码大小
     * @return 生成的二维码图片
     */
    public static BufferedImage generateQRCode(String qrCodeString, int size) throws WriterException, IOException {
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(qrCodeString, BarcodeFormat.QR_CODE, size, size, hints);
        BufferedImage qrCodeImage = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < size; x++) {
            for (int y = 0; y < size; y++) {
                qrCodeImage.setRGB(x, y, bitMatrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB());
            }
        }
        return qrCodeImage;
    }

    private static BufferedImage convertPDFToImage(byte[] pdfBytes, int width, int height) throws IOException {
        Image image = Image.getInstance(pdfBytes);
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = bufferedImage.createGraphics();
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, width, height);
        graphics.drawImage(image, 0, 0, width, height, null);
        graphics.dispose();
        return bufferedImage;
    }

    public static void main(String[] args) throws Exception {
        String text = "这是一段测试文字,用于生成海报";
        String qrCodeString = "https://www.baidu.com/";
        int imageSize = 600;
        int qrCodeSize = 

另一个方法:

将文字和二维码合成为一张图片,需要将二维码图片放置到文字图片上,并设置二维码的位置和大小。

示例代码如下:

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class PosterGenerator {
    private static final String FONT_PATH = "src/main/resources/msyh.ttf";

    /**
     * 生成带有文字和二维码的海报图片
     *
     * @param text         文字内容
     * @param imageSize    图片大小
     * @param fontName     字体名称
     * @param fontSize     字体大小
     * @param qrCodeString 二维码内容
     * @param qrCodeSize   二维码大小
     * @param qrCodeX      二维码X坐标
     * @param qrCodeY      二维码Y坐标
     * @return 生成的海报图片
     */
    public static BufferedImage generatePoster(String text, int imageSize, String fontName, float fontSize,
                                                String qrCodeString, int qrCodeSize, int qrCodeX, int qrCodeY) throws Exception {
        BufferedImage textImage = generateTextPoster(text, imageSize, fontName, fontSize);
        BufferedImage qrCodeImage = generateQRCode(qrCodeString, qrCodeSize);
        Graphics2D graphics = textImage.createGraphics();
        graphics.drawImage(qrCodeImage, qrCodeX, qrCodeY, null);
        graphics.dispose();
        return textImage;
    }

    /**
     * 生成带有文字的海报图片
     *
     * @param text      文字内容
     * @param imageSize 图片大小
     * @param fontName  字体名称
     * @param fontSize  字体大小
     * @return 生成的海报图片
     */
    public static BufferedImage generateTextPoster(String text, int imageSize, String fontName, float fontSize) throws Exception {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new ByteArrayOutputStream());
        document.open();
        PdfContentByte contentByte = writer.getDirectContent();
        Font font = FontFactory.getFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED, fontSize);
        Phrase phrase = new Phrase(text, font);
        ColumnText.showTextAligned(contentByte, Element.ALIGN_CENTER, phrase, imageSize / 2, imageSize / 2, 0);
        document.close();
        ByteArrayOutputStream baos = (ByteArrayOutputStream) writer.getDirectContent().getOutputStream();
        byte[] pdfBytes = baos.toByteArray();
        return convertPDFToImage(pdfBytes, imageSize, imageSize);
    }

    /**
     * 生成二维码图片
     *
     * @param qrCodeString 二维码内容
     * @param size         二维码大小
     * @return 生成的二维码图片
     */
    public static BufferedImage generateQRCode(String qrCodeString, int size) throws WriterException {
        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        BitMatrix bitMatrix = new MultiFormatWriter().encode(qrCodeString, BarcodeFormat.QR_CODE, size, size, hints);
        int width = bitMatrix.getWidth();
        int height = bitMatrix.getHeight();
        BufferedImage qrCodeImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                qrCodeImage.setRGB(x, y, bitMatrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB());
            }
        }
        return qrCodeImage;
    }

    private static BufferedImage convertPDFToImage(byte[] pdfBytes, int width, int height) throws IOException {
        Image image = Image.getInstance(pdfBytes);
        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = bufferedImage.createGraphics();
        graphics.setColor(Color.WHITE);
        graphics.fillRect(0, 0, width, height);
        graphics.drawImage(image, 0, 0, width, height, null);
        graphics.dispose();
        return bufferedImage;
    }

 public static void main(String[] args) throws Exception {
    String text = "这是一段测试文字,用于生成海报";
    String qrCodeString = "https://www.baidu.com/";
    int imageSize = 600;
    int qrCodeSize = 200;
    int qrCodeX = 200;
    int qrCodeY = 200;
    String fontPath = "src/main/resources/msyh.ttf";
    float fontSize = 30;

    BufferedImage posterImage = generatePoster(text, imageSize, fontPath, fontSize,
            qrCodeString, qrCodeSize, qrCodeX, qrCodeY);

    File outputFile = new File("poster.png");
    ImageIO.write(posterImage, "png", outputFile);
}
}

补全上面的main测试方法:

public static void main(String[] args) throws Exception {
    String text = "这是一段测试文字,用于生成海报";
    String qrCodeString = "https://www.baidu.com/";
    int imageSize = 600;
    int qrCodeSize = 200;
    int qrCodeX = 200;
    int qrCodeY = 200;
    String fontPath = "src/main/resources/msyh.ttf";
    float fontSize = 30;

    BufferedImage posterImage = generatePoster(text, imageSize, fontPath, fontSize,
            qrCodeString, qrCodeSize, qrCodeX, qrCodeY);

    File outputFile = new File("poster.png");
    ImageIO.write(posterImage, "png", outputFile);
}

在主函数中,我们设置了以下参数:

  • text:海报中要显示的文字内容。
  • qrCodeString:生成海报中的二维码内容,这里设置为百度首页。
  • imageSize:生成的海报图片大小。
  • qrCodeSize:生成的二维码大小。
  • qrCodeXqrCodeY:二维码在海报中的位置。
  • fontPath:文字所使用的字体路径。
  • fontSize:文字大小。

最后,我们调用generatePoster方法生成海报图片,并将其保存到文件中。注意,这里我们将图片保存为png格式,也可以保存为其他格式。文章来源地址https://www.toymoban.com/news/detail-477461.html

到了这里,关于[Java生成商品的海报图片 ]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 小程序生成分享海报图片并保存相册

    最近开发的小程序都有分享需求,功能大体为点击分享按钮,或主动生成海报后,用户操作保存对应海报为图片实现分享。以下是具体实现。 最终生成效果如图: 此处主要是生成工具库来生成普通二维码,如果要生成小程序码,只能通过后台接口调用开放API实现,且需要小

    2024年02月16日
    浏览(50)
  • canvasdrawer 微信原生小程序生成海报图片

    在小程序中生成海报是一种非常有效的推广方式 用户可以使用小程序的过程中生成小程序海报并分享给他人 通过海报的形式,用户可以直观地了解产品或服务的特点和优势 目前,小程序海报有两种常见的实现方式: · canvas 绘制海报 · 服务端绘制海报 这两种方式各有千秋

    2024年01月21日
    浏览(38)
  • 小程序使用canvas标签生成海报并保存图片

    先说一下做功能前的感受,简直一脸懵逼,第一次用canvas,只知道是个画布,其余什么都不知道…琢磨了一天才画出来… 开始之前百度了很久,想看看别人怎么写的,但是目前网上基本上用的都是wx.createCanvasContext这个api,但是这个api已经停止维护了,要求使用canvas代替,  

    2024年02月11日
    浏览(58)
  • uniapp 微信小程序 动态生成海报分享朋友圈,需先保存图片

    直接拷贝代码,不使用插件,自己纯代码实现。 从相册 或拍照 选择一个图片做海报背景。 大吉大利 今晚吃鸡。

    2024年02月11日
    浏览(60)
  • 微信小程序使用canvas画布生成二维码海报分享图片(完整示例代码)

    canvas.js //获取应用实例 const app = getApp() Page({ /** 页面的初始数据 */ data: { // canvas _width: 0, //手机屏宽 _heigth: 0,//手机屏高 swiperHeight: 300,//主图图片高度 canvasType: false,//canvas是否显示 loadImagePath: ‘’,//下载的图片 imageUrl: ‘https://cos.myfaka.com/car/service/1.jpg’, //主图网络路径 codeU

    2024年04月12日
    浏览(59)
  • 小程序-uni-app:将页面(html+css)生成图片/海报/名片,进行下载 保存到手机

    一、需要描述 本文实现,uniapp微信小程序,把页面内容保存为图片,并且下载到手机上。 说实话网上找了很多资料,但是效果不理想,直到看了一个开源项目,我知道可以实现了。 本文以开源项目uniapp-wxml-to-canvas 为蓝本 记录集成的步骤,以供参考。 详细内容可以下载并启

    2024年02月07日
    浏览(35)
  • 拿来就用的Java海报生成器ImageCombiner(一)

    如果您是UI美工大师或者PS大牛,那本文一定不适合你;如果当您需要自己做一张海报时,可以立马有小伙伴帮您实现,那本文大概率也不适合你。但是,如果你跟我一样,遇上到以下场景,最近公司上了不少传播方面的需求,需要合成各种营销图片。人事部和办公室的小伙伴

    2024年01月17日
    浏览(32)
  • 《Git入门实践教程》前言+目录

    版本控制系统(VCS)在项目开发中异常重要,但和在校大学生的交流中知道,这个重要方向并未受到重视。具备这一技能,既是项目开发能力的体现,也可为各种面试加码。在学习体验后知道,Git多样化平台、多种操作方式、丰富的资源为业内人士提供了方便的同时,也造成

    2024年02月10日
    浏览(50)
  • FPGA学习实践之旅——前言及目录

    很早就有在博客中记录技术细节,分享一些自己体会的想法,拖着拖着也就到了现在。毕业至今已经半年有余,随着项目越来越深入,感觉可以慢慢进行总结工作了。趁着2024伊始,就先开个头吧,这篇博客暂时作为汇总篇,记录在这几个月以及之后从FPGA初学者到也算有一定

    2024年02月03日
    浏览(35)
  • 小程序海报和H5海报生成

    通过移动端生成海报来达到分享引流的目的,海报生成其实就是利用canvas,拿到canvas生成的Data URLs保存为图片或分享给好友 提示:本章分为三部分,分别是canavas的基础用法、微信小程序海报的生成和H5海报的生成,点击目录大纲可以跳转到对应内容 w3school的canvas canvas基础使用

    2024年02月10日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包