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);
这篇关于保存具有透明背景的缓冲图像的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:保存具有透明背景的缓冲图像
- 从 finally 块返回时 Java 的奇怪行为 2022-01-01
- 如何使用WebFilter实现授权头检查 2022-01-01
- Spring Boot连接到使用仲裁器运行的MongoDB副本集 2022-01-01
- Jersey REST 客户端:发布多部分数据 2022-01-01
- 将log4j 1.2配置转换为log4j 2配置 2022-01-01
- Safepoint+stats 日志,输出 JDK12 中没有 vmop 操作 2022-01-01
- C++ 和 Java 进程之间的共享内存 2022-01-01
- value & 是什么意思?0xff 在 Java 中做什么? 2022-01-01
- Java包名称中单词分隔符的约定是什么? 2022-01-01
- Eclipse 插件更新错误日志在哪里? 2022-01-01