生成的样式
在写这个的时候遇到了一个问题:生成的图片蒙上了一层红色,
网上说是由于ImageIO.read这个方法导致的,解决办法是替换ImageIO.read方法使用 Toolkit.getDefaultToolkit().getImage
一、
Image src=Toolkit.getDefaultToolkit().getImage(file.getPath());
BufferedImage image=BufferedImageBuilder.toBufferedImage(src);//Image to BufferedImage
二、
Image imageTookit = Toolkit.getDefaultToolkit().createImage(bytes);
BufferedImage cutImage = BufferedImageBuilder.toBufferedImage(imageTookit);
BufferedImageBuilder源码
public static BufferedImage toBufferedImage(Image image) {
if (image instanceof BufferedImage) {
return (BufferedImage) image;
}
// This code ensures that all the pixels in the image are loaded
image = new ImageIcon(image).getImage();
BufferedImage bimage = null;
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
try {
int transparency = Transparency.OPAQUE;
GraphicsDevice gs = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gs.getDefaultConfiguration();
bimage = gc.createCompatibleImage(image.getWidth(null),
image.getHeight(null), transparency);
} catch (HeadlessException e) {
// The system does not have a screen
}
if (bimage == null) {
// Create a buffered image using the default color model
int type = BufferedImage.TYPE_INT_RGB;
bimage = new BufferedImage(image.getWidth(null),
image.getHeight(null), type);
}
// Copy image to buffered image
Graphics g = bimage.createGraphics();
// Paint the image onto the buffered image
g.drawImage(image, 0, 0, null);
g.dispose();
return bimage;
}
但在我这里更换后并没有起到作用,
我的图片生成的为红色是因为背景图片上设置了透明,可能是因为jpg不支持透明色的原因导致图片蒙上红色
1、
ImageIO.write(bg, "png", new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\image\\\\1a.jpg"));
输出正常
2、
ImageIO.write(bg, "jpg", new File("C:\\\\Users\\\\Administrator\\\\Desktop\\\\image\\\\1a.jpg"));
输出红色图片
代码地址:https://github.com/secret1base/qrcode
参考:https://blog.csdn.net/qing_gee/article/details/77341821