KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

AozoraEpub3でクラッシュする原因の除去

 AozoraEpub3でクラッシュする原因のcom.sun.image.codec.jpeg.JPEGCodecを使わず、javax.imageio.ImageIOを利用するように書き換えていきたい。

 

OpenJDKにcom.sun.image.codec.jpegが含まれていないので、度々エラーで止まる。いちおう、catchするように書かれてるのだけど、この際書き換えるべきだとは思う。

 
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;

 

static public BufferedImage readImage(String ext, InputStream is) throws IOException
{
BufferedImage image;
if (ext.equals("jpg") || ext.equals("jpeg")) {
try {
ImageDecoder dec = ImageCodec.createImageDecoder("jpeg", is, null);
RenderedImage ri = dec.decodeAsRenderedImage();
image = new BufferedImage(ri.getWidth(), ri.getHeight(), BufferedImage.TYPE_INT_RGB);
image.createGraphics().drawRenderedImage(ri, NO_TRANSFORM);
} catch (Exception e) {
image = ImageIO.read(is);
} catch (NoClassDefFoundError e) {
// OpenJDKではcom.sun.image.codec.jpegがなくてエラーになるので
// それをキャッチする
image = ImageIO.read(is);
}
} else {
image = ImageIO.read(is);
}
is.close();
return image;
}

これを下のように書き換えた。ImageIOが動かないJAVAがあるかのだろうか。上のif try catchを組み合わせた書き方で、画像の読み込みが失敗していることがあった。

 

static public BufferedImage readImage(String ext, InputStream is) throws IOException
{
BufferedImage image;
try {
image = ImageIO.read(is);
} catch (Exception e) {
throw new RuntimeException(e);
}
is.close();
return image;
}

 表紙の画像とか、内容とかを編集する機能が果たして必要なのかと思うことがしばしば。いっそ、画像の編集機能自体をなくしてもいいかなとも考えている。そうすればもっとコードがシンプルになるのにな。

docs.oracle.com

 

docs.oracle.com

 

qiita.com

qiita.com