它具有透明背景,
当我使用ImageIO.write(image,"jpg", file)
保存时,它会被破坏
损坏的结果是here
如何解决它的问题?谢谢
我的代码:
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import junit.framework.TestCase;
public class ImageResize1 extends TestCase{
public void testT1() throws IOException{
URL url=new URL("http://ec.europa.eu/culture/media/programme/images/logos/01_tr_media_col/01_tr_media_col_gif.gif");
BufferedImage image=ImageIO.read(url);
File file=new File("C:/temp/java/t7.jpg");
ImageIO.write(image,"jpg", file);
}
}
我用过:
for(int x = 0; x < scaled.getWidth(); x++) {
for(int y = 0; y < scaled.getHeight(); y++) {
int rgb = scaled.getRGB(x, y);
int alpha = (rgb >> 24) & 0xff;
if(alpha != 255) {
scaled.setRGB(x, y,-1); //set white
}
}
}
从here
查看这不对,结果是here
答案 0 :(得分:2)
JPG不支持透明度,所以你不能。
请尝试使用PNG,TIFF或GIF。
答案 1 :(得分:2)
AreaAveragingScaleFilter scaleFilter =
new AreaAveragingScaleFilter(
Math.round(originalWidth / factorX),
Math.round(originalHeight / factorY));
ImageProducer producer = new FilteredImageSource(original.getSource(), scaleFilter);
ImageGenerator generator = new ImageGenerator();
producer.startProduction(generator);
BufferedImage scaled = generator.getImage();
for(int x = 0; x < scaled.getWidth(); x++) {
for(int y = 0; y < scaled.getHeight(); y++) {
int rgb = scaled.getRGB(x, y);
int alpha = (rgb >> 24) & 0xff;
if(alpha != 255) {
scaled.setRGB(x, y,-1); //set white
}
}
}
JPEGImageWriteParam param = new JPEGImageWriteParam(null);
param.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality((float) 0.85);
java.util.Iterator<ImageWriter> it = ImageIO.getImageWritersBySuffix("jpg");
ImageWriter writer = it.next();
dest.getParentFile().mkdirs();
writer.setOutput(new FileImageOutputStream(dest));
writer.write(null, new IIOImage(scaled, null, null), param);
writer.dispose();
从here
查看答案 2 :(得分:0)
我无法对代码发表评论,因为我不是Java大师,但是......
JPEG格式不支持透明背景,因此如果您希望保留透明背景,则不会发生。
(不确定为什么要进行转换,但如果您需要支持透明度的高色彩格式,请改用PNG)
答案 3 :(得分:0)
从一种格式转换到另一种格式只是开始:)如果是我,我会通过将命令传递给操作系统来使用ImageMagik并让ImageMagick处理剩下的事情
除了转换之外,您还可以调整大小,添加文本,并且几乎可以在新创建的图像上执行所有photoshop技巧,这很容易。