javaの標準クラスライブラリでGIFを使えるイメージライブラリは出てきましたか?

今年の6月でGifの特許が切れたそうですが。。。
簡単な使い方を紹介してください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/07/20 22:34:22
  • 終了:--

回答(3件)

id:ozonepapa No.1

ozonepapa回答回数288ベストアンサー獲得回数02004/07/21 01:44:31

ポイント20pt

昔から、gifイメージ使えていたと思うのですが、

使えなかったのでしょうか。

J2sdkをインストールしたディレクトリのdemoフォルダのなかで、たくさん、gifファイル使っています。・j2sdk/demo/applets/ImageMapにもありますよ。

java.awt.imageはabstractクラスですね。

id:kunitz

ありがとうございます!

あれ、そういえばそうですよね。。。

2004/07/21 01:47:42
id:last_wednesday No.2

last_wednesday回答回数17ベストアンサー獲得回数02004/07/21 03:23:20

ポイント20pt

URLはダミーです。

読み込みや書き込みはjavax.swing.ImageIconのgetImage();やjava.awt.toolkit.getDeaultToolkit().createImage();やjavax.imageio.ImageIO.read()/write();などで行えると思います。

標準APIだと、あとはjava.awt.image.BufferedImageを取得したり、さらにjava.awt.Graphics2Dを取得するなどして処理することになると思います。拡大や縮小、回転などはjava.awt.image.AffineTransformOpが役に立ちます。

File file = new File(”path”);//読み込み元ファイル(URLなども使用可能)

BufferedImage bufferedImage = ImageIO.read(file);//ファイルからの読み込みの例

Bufferedimage partImage = bufferedImage.getSubimage(0, 0, 200, 200);//部分イメージを取得

partImage = (new AffineTransformOp(AffineTransform.getScaleInstance(0.5, 0.5), null)).filter(partImage, null);//サイズを1/2に変更

partImage = (new AffineTransformOp(AffineTransform.getRotateInstance(Math.PI/4, 50, 50), null)).filter(partImage, null);//座標(50, 50)に対してpi/4(rad)回転

partImage = (new AffineTransformOp(AffineTransform.getTranslateInstance(20, 20), null)).filter(partImage, null);//右に20、下に20平行移動

Graphics2D g2d = (Graphics2D)partImage.getGraphics();//Graphics2Dの取得

..//g2dに対して処理(絵や文字を描く)

ImageIO.write(partImage, ”gif”, file);//ファイルに保存

AffineTransformOpは、AffineTransformのインスタンスを使って変換を指定しインスタンスを作成し、filter();メソッドを使って変換されたBufferedImageを取得することができます。AffineTransformの必要な変換を表現したインスタンスは、staticメソッドから取得すると簡単です。ただ、特殊な変換は自分でコンストラクタからつくる必要があるかも。

それから、使ったことはないですが、ImageにgetScaledInstance();というサイズ変更メソッドがあるみたいです。場合によってはこの方が簡単かも。

標準APIだと、GIF、JPEG、PNGが読み書きできたと思います。

オプションパッケージだと、Java Advanced Imaging (JAI) APIでさらに多くのファイル形式について読み書きしたり、いろいろなことが行えるようです。

こちらはほとんど知りません。

id:kunitz

ありがとうございます!

2004/07/21 07:16:32
id:last_wednesday No.3

last_wednesday回答回数17ベストアンサー獲得回数02004/07/21 10:12:59

ポイント20pt

http://www.hatena.ne.jp/1090330462#

javaの標準クラスライブラリでGIFを使えるイメージライブラリは出てきましたか? 今年の6月でGifの特許が切れたそうですが。。。 簡単な使い方を紹介してください。.. - 人力検索はてな

URLはダミーです。

上の回答を書いた者ですが、補足です。

・まず、上のソース3行目のBufferedImageのIがiになっていました。訂正します。

・それから、AffineTransformOp/AffinTransform(java.awt.geom.AffineTransform)を利用した変換はイメージそれ自体を変換するものです。

イメージそれ自体は変換せずにイメージ内に描かれているものを変換するには、Graphics2DのdrawImageメソッドを使います。

以下は前述の例と同じ変換を行うものですが、イメージはもとのイメージと同じ大きさ・形のままです。この例だとイメージが重なった感じ

になります。

Graphics2D g2d = (Graphics2D)partImage.getGraphics();

g2d.drawImage(partImage, AffineTransform.getScaleInstance(0.5, 0.5), null);

g2d.drawImage(partImage, AffineTransform.getRotateInstance(Math.PI/4, 50, 50), null);

g2d.drawImage(partImage, AffineTransform.getTranslateInstance(20, 20), null);

・BufferedImageのgetSubimage()メソッドによって得られるイメージはもとのイメージとデータを共有します。

共有させたくない場合は、新しくBufferedImageのインスタンスを作成してGraphics2Dを取得し、drawImage()を使って描画する必要があると

思います。

・java.awt.imageパッケージの*Opという名前のクラスはAffineTransformOpのように、BufferedImageに対して何らかの変換を行うためのクラ

スです。

使い方もあまり変わらないと思います。

id:kunitz

ありがとうございます!

http://www.hcn.zaq.ne.jp/no-ji/javamemo/javax_imageio_ImageI...

によると

>読み込むときは、PNG,JPG,GIFに対応している。

>そして書き込むときには、PNG,JPGに対応している。

>GIFが書き込めないのはUNISYS社のライセンスによるものだろう。

GIFの書き出しはどうなんでしょうか?

2004/07/21 11:58:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません