java实现两张png图片合并(重叠)成一张图片

/**
 * @date: 2023/4/16 15:01
 * @Description:
 */
public class ImgUtils {

    /***
     * @Date: 2023/4/16 15:13
     * @Description  将签字 和 指纹 的png图片合成一张
     * @param qzBase64 签字base64
     * @param zwBase64  指纹base64
     **/
    public static String hbImg(String qzBase64,String zwBase64){
        String result = "";

        if (!StringHelper.isEmpty(qzBase64) & !StringHelper.isEmpty(zwBase64)){

            try {

                byte[] qzBytes = new BASE64Decoder().decodeBuffer(qzBase64);
                byte[] zwBytes = new BASE64Decoder().decodeBuffer(zwBase64);

                // 设置图片大小
                BufferedImage qzImg = resizeImagePng(256, 256, ImageIO.read(new ByteArrayInputStream(qzBytes)));
                BufferedImage zwImg = resizeImagePng(256, 256, ImageIO.read(new ByteArrayInputStream(zwBytes)));

                // 创建背景画布
                BufferedImage background = new BufferedImage(qzImg.getWidth(), qzImg.getHeight(), BufferedImage.TYPE_INT_RGB);

                // 设置背景色
                Graphics2D g2d = background.createGraphics();
                // 设置背景颜色
                g2d.setColor(Color.WHITE);
                // 填充
                g2d.fillRect(0, 0, background.getWidth(), background.getHeight());
                g2d.drawImage(qzImg, 0, 0, null);
                g2d.dispose();

                // 指纹写入
                Graphics2D graphics = background.createGraphics();
                // 设置图片透明度
                graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,1.0f));
                graphics.drawImage(zwImg,0,0,zwImg.getWidth(), zwImg.getHeight(),null);
                graphics.dispose();

                // 取掉白色背景  设置为透明图片
                ImageIcon imageIcon = new ImageIcon(background);
                BufferedImage bufferedImage = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(),
                        BufferedImage.TYPE_4BYTE_ABGR);
                Graphics2D g2D = (Graphics2D) bufferedImage.getGraphics();
                g2D.drawImage(imageIcon.getImage(), 0, 0, imageIcon.getImageObserver());
                int alpha = 0;
                for (int j1 = bufferedImage.getMinY(); j1 < bufferedImage.getHeight(); j1++) {
                    for (int j2 = bufferedImage.getMinX(); j2 < bufferedImage.getWidth(); j2++) {
                        int rgb = bufferedImage.getRGB(j2, j1);
                        int R = (rgb & 0xff0000) >> 16;
                        int G = (rgb & 0xff00) >> 8;
                        int B = (rgb & 0xff);
                        if (((255 - R) < 30) && ((255 - G) < 30) && ((255 - B) < 30)) {
                            rgb = ((alpha + 1) << 24) | (rgb & 0x00ffffff);
                        }
                        bufferedImage.setRGB(j2, j1, rgb);
                    }
                }
                g2D.drawImage(bufferedImage, 0, 0, imageIcon.getImageObserver());

                // 输出流
                ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

                ImageIO.write(bufferedImage, "png", outputStream);

                // 将合成图片转成base64返回
                result = new BASE64Encoder().encode(outputStream.toByteArray());

            }catch (Exception e){
                e.printStackTrace();
            }
        }
        return result;
    }

    /***
     * @Date: 2023/4/16 15:14
     * @Description  设置图片的大小
     * @param x  width
     * @param y height
     * @param bfi
     **/
    public static BufferedImage resizeImagePng(int x, int y, BufferedImage bfi) {
        BufferedImage bufferedImage = new BufferedImage(x, y, BufferedImage.TYPE_INT_ARGB);
        bufferedImage.getGraphics().drawImage(
                bfi.getScaledInstance(x, y, Image.SCALE_SMOOTH), 0, 0, null);
        return bufferedImage;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言可以使用Apache POI库来处理Microsoft Office文件格式(如docx),同时也可以使用Java图形库(如Java AWT或JavaFX)来处理图片。因此,你可以使用以下步骤将多张PNG图片合并到docx文件中: 1. 使用Java图形库(如Java AWT或JavaFX)加载PNG图片并将它们组合一个单独的图像。 2. 使用Apache POI库创建一个docx文档对象。 3. 将组合后的图像插入到docx文档中。 4. 保存docx文档。 下面是一个简单的代码示例,可以将两张PNG图片合并一个docx文件中: ``` import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; public class MergeImagesToDocx { public static void main(String[] args) throws Exception { // 加载PNG图片 BufferedImage image1 = ImageIO.read(new File("image1.png")); BufferedImage image2 = ImageIO.read(new File("image2.png")); // 组合一个单独的图像 int width = image1.getWidth() + image2.getWidth(); int height = Math.max(image1.getHeight(), image2.getHeight()); BufferedImage combined = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); // 绘制第一张图片 combined.getGraphics().drawImage(image1, 0, 0, null); // 绘制第二张图片 combined.getGraphics().drawImage(image2, image1.getWidth(), 0, null); // 创建docx文档对象 XWPFDocument doc = new XWPFDocument(); // 插入图片到docx文档中 XWPFParagraph p = doc.createParagraph(); XWPFRun r = p.createRun(); FileOutputStream out = new FileOutputStream("output.docx"); ImageIO.write(combined, "png", out); r.addPicture(out, XWPFDocument.PICTURE_TYPE_PNG, "output.png", width, height); // 保存docx文档 doc.write(new FileOutputStream("output.docx")); doc.close(); } } ``` 在这个例子中,我们使用Java图形库加载了两张PNG图片,并将它们组合一个单独的图像。然后,我们使用Apache POI库创建了一个docx文档对象,并将组合后的图像插入到文档中。最后,我们将docx文档保存到磁盘上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值