保存具有透明背景的缓冲图像

Save buffered image with transparent background(保存具有透明背景的缓冲图像)
本文介绍了保存具有透明背景的缓冲图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将签名图像保存为 .jpg 图片.我使用graphic2d在图像上绘制签名的每个像素(使用签名平板电脑获得),它工作得很好,但我总是得到一个白色的背景.如果我想在PDF文档上签名,jpg图片的白色方块的边框覆盖了PDF的部分文字.

I'm saving the image of a signature as a .jpg picture. I use graphic2d to paint on the image every pixel of the signature (gotten with a signature tablet) and it works perfectly but I'm always gettin a white background. If I want to put the signature on a PDF document, the borders of the white square of the jpg image covers some of the words of the PDF.

我想要得到的是用透明背景保存 jpg 图像,所以当我把它放在 PDF 上时,没有任何文字被白色图像背景覆盖,只有签名线.

What I want to get is to save the jpg image with a transparent background, so when I put it on the PDF there are no words covered with the white image background but just the signature lines.

这是保存缓冲图像的代码.它在白色背景下完成.

This is the code that saves the buffered image. It does it with the white background.

 // This method refers to the signature image to save
private RenderedImage getImage() {

    int width = tabletWidth;
    int height = tabletHeight;

    // Create a buffered image in which to draw
    BufferedImage bufferedImage = new BufferedImage(width, height,
            BufferedImage.TYPE_INT_RGB);

    // Create a graphics contents on the buffered image
    Graphics2D g2d = bufferedImage.createGraphics();

    // Draw graphics
    g2d.setColor(Color.WHITE);
    g2d.fillRect(0, 0, width, height);

    drawPoints(Tablet.getPenPoints(), g2d, Color.BLACK);

    // Graphics context no longer needed so dispose it
    g2d.dispose();

    return bufferedImage;
}

我尝试将其设置为透明但没有成功,所以我发布了这个工作部分.

I tried to set it transparent but with no success, so I posted this working part.

推荐答案

使用 BufferedImage.TYPE_INT_ARGB 代替 BufferedImage.TYPE_INT_RGB.并将其保存为PNG图片,JPEG不支持透明度.

Use BufferedImage.TYPE_INT_ARGB instead of BufferedImage.TYPE_INT_RGB. And save it to PNG image, JPEG does not support the transparency.

UPD:

为了设置背景透明,使用它:

For set the background transparent, use it:

g2d.setComposite(AlphaComposite.Clear);
g2d.fillRect(0, 0, w, h);

为了绘制你的图像:

g2d.setComposite(AlphaComposite.Src);
drawPoints(Tablet.getPenPoints(), g2d, Color.BLACK);

这篇关于保存具有透明背景的缓冲图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How can create a producer using Spring Cloud Kafka Stream 3.1(如何使用Spring Cloud Kafka Stream 3.1创建制片人)
Insert a position in a linked list Java(在链接列表中插入位置Java)
Did I write this constructor properly?(我是否正确地编写了这个构造函数?)
Head value set to null but tail value still gets displayed(Head值设置为空,但仍显示Tail值)
printing nodes from a singly-linked list(打印单链接列表中的节点)
Control namespace prefixes in web services?(控制Web服务中的命名空间前缀?)