Java 使用AnimatedGifEncoder类创建的gif图像的部分帧是不透明的
我已经陷入了一个问题很久了,那就是当我使用animatedgifcoder类来创建透明的GIF图像时,总是有一部分帧是不透明的。这是我的密码Java 使用AnimatedGifEncoder类创建的gif图像的部分帧是不透明的,java,gif,transparent,Java,Gif,Transparent,我已经陷入了一个问题很久了,那就是当我使用animatedgifcoder类来创建透明的GIF图像时,总是有一部分帧是不透明的。这是我的密码 AnimatedGifEncoder gifEncoder = new AnimatedGifEncoder(); gifEncoder.start("/Users/fengjiakang/Documents/result.gif"); gifEncoder.setRepeat(0); gifEncoder.setFrameR
AnimatedGifEncoder gifEncoder = new AnimatedGifEncoder();
gifEncoder.start("/Users/fengjiakang/Documents/result.gif");
gifEncoder.setRepeat(0);
gifEncoder.setFrameRate(800);
gifEncoder.setQuality(20);
gifEncoder.setTransparent(new Color(250, 250, 250));
Graphics2D g2d = null;
BufferedImage bg = null;
BufferedImage parentPngImg = null;
BufferedImage childImg = null;
ExecutorService executorService = Executors.newFixedThreadPool(13);
List<Future<BufferedImage>> futureResult = new ArrayList<Future<BufferedImage>>(13);
for (int i = 0; i < imageFrames.size(); i++) {
futureResult.add(executorService.submit(new MyCallable(imageFrames.get(i).getLayers(), imageFrames.get(i).getIdx())));
}
executorService.shutdown();
for (Future<BufferedImage> returnFrame : futureResult) {
BufferedImage bufferedImage = returnFrame.get();
gifEncoder.addFrame(bufferedImage);
}
gifEncoder.finish();
AnimatedGifEncoder gifEncoder=新的AnimatedGifEncoder();
gifEncoder.start(“/Users/fengjiakang/Documents/result.gif”);
gif.setRepeat(0);
设置帧率(800);
吉福编码器。设置质量(20);
gifEncoder.setTransparent(新颜色(250250250));
Graphics2D g2d=null;
BuffereImage bg=null;
BuffereImage parentPngImg=null;
BuffereImage childImg=null;
ExecutorService ExecutorService=Executors.newFixedThreadPool(13);
List futureResult=新阵列列表(13);
对于(int i=0;i
MyCallable代码是:
public BufferedImage call() throws Exception {
PicService picService = new PicServiceImpl();
BufferedImage childImg = null;
ImageLayer layer = imageLayers.get(0);
BufferedImage bg = null;
try {
bg = ImageIO.read(new File(pre + layer.getAsset_path().trim()));
BufferedImage parentPngImg = new BufferedImage(((Double) (bg.getWidth() * imageLayers.get(0).getW())).intValue(), ((Double) (bg.getHeight() * imageLayers.get(0).getH())).intValue(),
BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = parentPngImg.createGraphics();
//set a background color for each frame so that can use
//setTransparent() method to make frame transparent.
g2d.setColor(new Color(250, 250, 250));
g2d.fillRect(0, 0, bg.getWidth(), bg.getHeight());
for (int i = 0; i < imageLayers.size(); i++) {
childImg = ImageIO.read(new File(pre + imageLayers.get(i).getAsset_path().trim()));
picService.overlapImage(childImg, parentPngImg, imageLayers.get(i).getCx(), imageLayers.get(i).getCy(),
imageLayers.get(i).getW(), imageLayers.get(i).getH(), imageLayers.get(i).getR());
}
return parentPngImg;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public buffereImage调用()引发异常{
PicService PicService=new picserviceinpl();
BuffereImage childImg=null;
ImageLayer层=imageLayers.get(0);
BuffereImage bg=null;
试一试{
bg=ImageIO.read(新文件(pre+layer.getAsset_path().trim());
BuffereImage parentPngImg=新的BuffereImage(((双精度)(bg.getWidth()*imageLayers.get(0.getW())).intValue(),((双精度)(bg.getHeight()*imageLayers.get(0.getH()).intValue(),
BuffereImage.TYPE_INT_ARGB);
Graphics2D g2d=parentPngImg.createGraphics();
//为每个帧设置背景色,以便可以使用
//setTransparent()方法使帧透明。
g2d.setColor(新颜色(250250250));
g2d.fillRect(0,0,bg.getWidth(),bg.getHeight());
对于(int i=0;i
结果如下:有人能帮我解决这个问题吗
提前感谢您正在使用gif库?此java gif库的作者是Kevin Weiner,写于2003年。