画像に対して個人情報等をマスクする際に利用します。
private void imageMaskBlack(String imageFile) thorws Exception { // 変数を宣言する。 BufferedImage bimg = null; Graphics graphics = null; ImageReader jpgReader = null; ImageWriter jpgWriter = null; try { // イメージファイルを読み込む。(ImageIO.readは利用しない方針) jpgReader ImageIO.getImageReadersByFormatName("jpeg").next(); jpgReader.setInput(ImageIO.createImageInputStream(new File(imageFile))); bimg = jpgReader.read(0); // Graphicsオブジェクトを取得する。 graphics = bimg.getGraphics(); graphics.setColor(Color.BLACK); // X座標、Y座標、幅、高さを指定し黒色でマスクする。 // 画像の左上がX座標:0、Y座標:0 graphics.fillRect(100, 50, 100, 100); graphics.drawImage(bimg, 0, 0, null); // 品質と解像度指定 // イメージを書き込むため、ImageIOからjpg用のImageWriterを取得する。 jpgWriter = ImageIO.getImageWritersByFormatName("jpeg").next(); // ImageWriterのパラメータ設定 // パラメータを取得する。 JPEGImageWriteParam jpgWriteParam = (JPEGImageWriteParam)jpgWriter.getDefaultWriteParam(); // パラメータに品質指定を行うモードを指定する。 jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); // パラメータに品質を指定する。(0.0f~1.0f) jpgWriteParam.setCompressionQuality(0.5f); // ImageWriterのメタデータの設定 // メタデータを取得する。 IIOMetadata imageMeta = jpgWriter.getDefaultImageMetadata(new ImageTypeSpecifier(bimg), jpgWriteParam); // メタデータからXMLのツリー構造を取得する。 Element tree = (Element)imageMeta.getAsTree("javax_imageio_jpeg_image_1.0"); // ツリー構造から要素「JFIF」を取得する。 Element jfif = (Element)tree.getElementsByTagName("app0JFIF").item(0); //DPI指定を行うモードを指定する。 jfif.setAttribute("resUnits", "1"); // X座標は300dpiを指定する。 jfif.setAttribute("Xdensity", 300); // Y座標は300dpiを指定する。 jfif.setAttribute("Ydensity", 300); // メタデータにツリー構造を設定し直す。 imageMeta.setFromTree("javax_imageio_jpeg_image_1,0", tree); // これまでに行った設定を元にイメージファイルを出力する。(ImageIO.writeは利用しない方針) jpgWriter.setOutput(ImageIO.createImageOutputStream(new File(imageFile))); jpgWriter.write(null, new IIOImage(bimg, null, imageMeta), jpgWriteParam); } finally { if (grahics != null) { graphics.dispose(); graphics = null; } if (jpgWriter != null) { jpgWriter.reset(); jpgWriter = null; } if (jpgReader != null) { jpgReader.reset(); jpgReader = null; } if (bimg != null) { bimg.flush(); bimg = null; } } }