ImageIO.write() を使用して PNG ファイルを JPG に変換しています。何らかの理由で、結果の画像の上にピンクのレイヤーが表示されます。私は解決策を広範囲に探しましたが、何も見つかりませんでした。このコードは、PNG 以外のすべての種類の画像で機能します。
12671 次
4 に答える
2
バッファが作成された後に使用されない場合、他のコードスニペットがどのように機能するかわかりません。このピンク色の問題は、jvmバージョン固有であることがわかりました。
私が見つけた最も簡単な解決策はこれを行うことです。
BufferedImage image = null;
BufferedImage imageRGB = null;
// imageBytes is some png file you read
image = ImageIO.read(new ByteArrayInputStream(imageBytes));
// Attempt at PNG read fix
imageRGB = new BufferedImage(image.getWidth(),
image.getHeight(), BufferedImage.TYPE_INT_RGB);
// write data into an RGB buffered image, no transparency
imageRGB.setData(image.getData());
// return the RGB buffered image, or do ImageIO.write( ... );
return imageRGB; // fixed for jpeg
于 2011-12-07T15:56:24.847 に答える
1
ImageIO とタグ付けされた他の SO 回答をすばやく読むと、これにつながりました。
根本的な原因は、バグのあるリーダーである可能性があります。提案された回避策は、別のリーダー パッケージを使用することです。
上記の編集リンクは壊れていますが、これがそのようです。
編集上記のリンクは壊れています。ここでは archive.org にあります。
于 2009-12-02T01:15:59.977 に答える
0
私も同じ問題を抱えていましたが、png形式で書くと解決します。
このようなもの、
ImageIO.write(resizedImageBuffer, "png", baos);
于 2013-10-01T09:53:50.843 に答える
-1
役に立つかもしれないコードを含むこのリンクを見つけました。いくつかの画像でコードを試しましたが、問題を再現できませんでした。devyn_a による最後の回答を試しましたが、何も壊れませんでした。devyn_a のソリューションで変更されたコードを次に示します。
String url = "file:///d:/teststuff/IMG_0393.JPG";
String to = "d:/teststuff/out.jpg";
BufferedImage oldImage = ImageIO.read(new URL(url));
BufferedImage buffer = new BufferedImage (oldImage.getWidth(),
oldImage.getHeight(), BufferedImage.TYPE_INT_RGB);
ImageIO.write(ImageIO.read(new URL(url)), "jpg", new File(to));
これで問題が解決するかどうかは興味深いところです。
于 2010-12-08T12:54:36.997 に答える