.ico形式の画像がたくさんあり、Java SEプロジェクトで使用したいのですが、形式がわかりません。どうすればこれを回避できますか?
3 に答える
image4jを試してみてください-Java用の画像ライブラリ
image4jライブラリを使用すると、100%純粋なJavaで特定の画像形式を読み書きできます。
現在、次の形式がサポートされています。
- BMP(Microsoftビットマップ形式-非圧縮; 1、4、8、24、および32ビット)
- ICO(Microsoftアイコン形式-1、4、8、24、および32ビット[XP非圧縮、Vista圧縮])
ライブラリを使用すると、icoファイルを簡単にデコードできます
List<BufferedImage> image = ICODecoder.read(new File("input.ico"));
Apache Commons Imagingを使用すると、ICOファイルの読み取りと書き込みが可能になります。
List<BufferedImage> images = Imaging.getAllBufferedImages(new File("input.ico"));
メタデータのいくつかの一般的な形式(EXIF、IPTC、XMP)もサポートしています。
TwelveMonkeys ImageIOを使用すると、ImageIO APIを拡張して、ICOおよびその他の多数の画像ファイル形式をサポートできます。
Apache Commons Imaging 1.0-alpha2でicoファイルを読み取るためのヒント:
icoファイルをファイルとして読み取ることとicoファイルをbyte[]として読み取ることには違いがあるようです。icoファイルをImaging.getAllBufferedImages(File)
読み取り、icoファイルImaging.getAllBufferedImages(new ByteArrayInputStream(byte[] icoFileContent, yourIcoFilename)
も読み取ります。Imaging.getAllBufferedImages(byte[])
同じicoファイルを読み取りませんが、をスローしImageReadException
ます。以下のコードを参照してください。
File icoFile = new File("bluedot.ico");
// Works fine
List<BufferedImage> images = Imaging.getAllBufferedImages(icoFile);
Assert.assertFalse(images.isEmpty());
ImageIO.write(images.get(0), "png", new File("bluedot.png"));
// Also works fine
byte[] icoFileContent = Files.readAllBytes(icoFile.toPath());
images = Imaging.getAllBufferedImages(new ByteArrayInputStream(icoFileContent), "bluedot.ico");
Assert.assertFalse(images.isEmpty());
ImageIO.write(images.get(0), "png", new File("bluedot2.png"));
// Throws an exception
images = Imaging.getAllBufferedImages(icoFileContent);
さらに、Apache Commons Imaging 1.0-alpha2で読み取れない.icoファイルを作成した方法のガイドもありますbyte[]
(ただし、として読み取り可能でFile
あり、として読み取り可能ですByteArrayInputStream
)。
- GIMPを起動します(私の場合はバージョン2.10.22)
- ウィンドウメニュー「ファイル」>「新規...」
- テンプレート:[空]
- 幅:48px
- 高さ:48px
- 残りはそのままにしておきます(下のスクリーンショットを参照)
- 何かを描く(例:青い点)
- ウィンドウメニュー「ファイル」>「名前を付けてエクスポート...」
- ファイル名:「bluedot.ico」
- アイコンの詳細:「4bpp、1ビットアルファ、16スロットパレット」
- 圧縮(PNG):チェックされていません
- 「エクスポート」をクリックします
Imaging.getAllBufferedImages(byte[])
投げますorg.apache.commons.imaging.ImageReadException: Can't parse this format.
Imaging.getAllBufferedImages(File)
このファイルを読み取ります。