PNG画像をBufferedImageとして開いた場合、PNG画像内のパレットを減らして、色が少なくなるようにすることができますか?PNG - Java 2Dを使用してパレットを縮小することはできますか?
たとえば、WikipediaでColour depthを見ると、私のPNGイメージ(右から3番目のイメージ)に16色を使用したいと思います。
Java 2Dでは不可能な場合は、これを効果的に実行できるライブラリがありますか?
PNG画像をBufferedImageとして開いた場合、PNG画像内のパレットを減らして、色が少なくなるようにすることができますか?PNG - Java 2Dを使用してパレットを縮小することはできますか?
たとえば、WikipediaでColour depthを見ると、私のPNGイメージ(右から3番目のイメージ)に16色を使用したいと思います。
Java 2Dでは不可能な場合は、これを効果的に実行できるライブラリがありますか?
私はマルタインCourteauxは正しかったと思う:ここ
は実装例です:
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.IndexColorModel;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImagingTest2 {
public static void main(String[] args) throws IOException {
BufferedImage src = ImageIO.read(new File("in.png")); // 71 kb
// here goes custom palette
IndexColorModel cm = new IndexColorModel(
3, // 3 bits can store up to 8 colors
6, // here I use only 6
// RED GREEN1 GREEN2 BLUE WHITE BLACK
new byte[]{-100, 0, 0, 0, -1, 0},
new byte[]{ 0, -100, 60, 0, -1, 0},
new byte[]{ 0, 0, 0, -100, -1, 0});
// draw source image on new one, with custom palette
BufferedImage img = new BufferedImage(
src.getWidth(), src.getHeight(), // match source
BufferedImage.TYPE_BYTE_INDEXED, // required to work
cm); // custom color model (i.e. palette)
Graphics2D g2 = img.createGraphics();
g2.drawImage(src, 0, 0, null);
g2.dispose();
// output
ImageIO.write(img, "png", new File("out.png")); // 2,5 kb
}
}
縮小画像はひどいです。私は16色(均等に配分された)があなたの6色よりもかなり良いと思います。 (しかしまだ+1です。) –
ありがとうございました、16色はインデントを破り、スクロールバーを導入します。 :D – Rekin
これは魅力的です!なぜあなたはインデックスに '/ /赤緑1緑2青白黒 'というラベルが付いているのか説明できますか?なぜあなたは'緑1 'と'緑2 'を持っていますか?ありがとう – Joeblackdev
下部のパレットで新しいBufferedImageを作成し、createGraphic()
を使用してGraphics2D
オブジェクトを取得します。グラフィックス上に元の画像を描画します。 dispose()
グラフィックスはこちらです。
BufferedImage img = new BufferedImage(orig.getWidth(), orig.getHeight(),
BufferedImage.TYPE_USHORT_555_RGB);
淡色を定義する方法色は? – Pindatjuh
これは何を達成するでしょうか? – Joeblackdev
あなたは確かにdownvoteに値しませんでした。私はそれを証明するために私の答えを提供しました。 – Rekin
http://stackoverflow.com/questions/87062/color-reduction- in-java –
ここでコードでPNGImageWriterに提供されるオプションを見てください:http://forums.oracle.com/forums/thread.jspa?messageID=5386868 – Rekin