ImageIO.writeはgifとして保存しませんが、jpgやpngには使えますか?
ImageIO.write()
はgifで動作しませんか?これは、gifが独占的なCompuserveのものであることに対する何らかの逆行ですか?または私はちょうど愚かな(私はそれが最後のものだと思います:))
ImageIO.writeはgifとして保存しませんが、jpgやpngには使えますか?
ImageIO.write()
はgifで動作しませんか?これは、gifが独占的なCompuserveのものであることに対する何らかの逆行ですか?または私はちょうど愚かな(私はそれが最後のものだと思います:))
http://java.sun.com/javase/6/docs/api/javax/imageio/package-summary.html#gif_plugin_notes
注意愚かな(私はそれが最後の1 :)だ推測している)されています。
あなたがbasicly、GIFとして保存されていないやるべきこと:INYの答えに拡大すること
umm ...私はそこに何を見ているのか分かりません...あなたに意味があるとすれば、私はあなたがこれを命令または2つに翻訳するほど親切ではないと思います。実際に "やって"いるはずですか? –
あなたは何を得ているのか分かりません。 RGB画像をGIFに保存するだけでは、別の種類の画像を使用できますか? – iny
。 GIFは256色の色付き画像です(したがって、ファイルサイズは小さくなります)。画像の色が256色を超える場合は、保存する前に色を256にダウンサンプリングしてください。何をすべきか分からないので、エンコーダはあなたのためにそれをしません。それはおそらくイメージの書き込みを開始し、一度256色を超えると、ただ壊れてしまいます。
描画コードは、あなたがそれについて何も考えずに色深度を増加させること、見栄えするアンチエイリアスを使用している場合、私はあなたがkindofが、この(擬似コード)のような
// Create the buffered image.
BufferedImage bufferedImage = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
... //fill image data (works fine)
ImageIO.write(bufferedImage, "JPG", f1); // works fine
ImageIO.write(bufferedImage, "PNG", f2); //works fine
// downsample to lower color depth by using BYTE_RGB?
BufferedImage crappyImage = new BufferedImage(w,h,BufferedImage.TYPE_BYTE_RGB);
crappyImage.getGraphics().drawImage(bufferedImage, 0, 0, w, h, null);
// or you could repeat the drawing code above with less colors
if (!ImageIO.write(crappyImage , "GIF", f3))
{
//still too many colors
f3.delete();
showError("Could not save as gif, image had too many colors");
}
をそれを行うことができると思います。たとえば、白い背景にAA線で描かれた斜めの青い線を描くと、Color.WHITEとColor.BLUEの2色が表示されますが、細かく見ると青色の色合いがあります対角線のギザギザの外観。
TYPE_BYTE_RGBはBufferedImageのメンバーではありません。 TYPE_BYTE_INDEXED(javaドキュメントが代わりに提案していると思われる)では、結果に変更は生じません。しかし、私はちょうどgifをスキップし、誰もgifをもう使用しないので、より重要な問題に進むと思います:) –
なぜ私はそれがpsuedocodeだと言ったのか:)それ以外にもTYPE_3BYTE_BGRやTYPE_USHORT_555_RGBのようなものがあります。 最も近いのは、BufferedImageのjavadocsでの読み込みのTYPE_BYTE_INDEXEDです –
画像が8ビット以上の色を使用しているため、GIFに収まらない可能性がありますか? –