c#ではImage.HorizontalResolutionとImage.VerticalResolutionを使用できます。イメージのdpiを取得する方法(Java)
しかし、Javaでは、どうすれば入手できますか?
ImageInfo.java
が見つかりましたが、いくつかの画像タイプしかサポートしていません。
http://kickjava.com/src/imageinfo/ImageInfo.java.htm
c#ではImage.HorizontalResolutionとImage.VerticalResolutionを使用できます。イメージのdpiを取得する方法(Java)
しかし、Javaでは、どうすれば入手できますか?
ImageInfo.java
が見つかりましたが、いくつかの画像タイプしかサポートしていません。
http://kickjava.com/src/imageinfo/ImageInfo.java.htm
あなたのImageReaderのインスタンスを取得します。次に、最初のImageReader、 を使用して入力を設定し、IIOImageまたはgetImageMetadata(pageIndex)のみを読み取ります。 イメージフォーマットの中立メタデータxmlを取得し、 希望のデータについて解析します。
ImageInputStream iis = ImageIO.createImageInputStream(in);
Iterator it = ImageIO.getImageReaders(iis);
if (!it.hasNext()) {
System.outprintln("No reader for this format");
}
ImageReader reader = (ImageReader) it.next();
reader.setInput(iis);
IIOMetadata meta = reader.getImageMetadata(0);
IIOMetadataNode dimNode = meta.getStandardDimensionNode();
NodeList nodes = dimNode.getElementsByTagName("HorizontalPixelSize");
IIOMetadataNode dpcWidth = (IIOMetadataNode)nodes.nextElement();
nodes = dimNode.getElementsByTagName("VerticalPixelSize");
IIOMetadataNode dpcHeight = (IIOMetadataNode)nodes.nextElement();
解像度にセンチメートル当たり// ...カルクドット:
のImageMagickでDPI = DPC/2.54
画像全体ニュートラルメタデータ形式は、すべての画像に関連する作業のための強力なツールです。 IMをインストールする必要があり、環境のためにいくつかの設定が必要ですが、それは問題の価値があります。
私はあなたがJMagickウィットIMを使用することをお勧め:
それが与えられたURLに記載されているので、私はどのようにの詳細を説明しません。
純粋なすべてのJavaソリューションで問題になることは間違いありません。 – Enerccio
Apache Commons Sanselanライブラリを使用して、画像情報:http://commons.apache.org/imaging/index.htmlを取得できます。
final ImageInfo imageInfo = Sanselan.getImageInfo(file_);
final int physicalWidthDpi = imageInfo.getPhysicalWidthDpi();
final int physicalHeightDpi = imageInfo.getPhysicalHeightDpi();
charm :-) thxのように動作します。 – Marcin
ImageReaderインスタンスの助けを借りて、イメージメタデータを中立形式で取得し、必要なものを解析することができます。 DTDはhereです。あなたはそれがある場合にのみ、解像度を取得します
注:
ImageInputStream iis = ImageIO.createImageInputStream(new File(path));
Iterator it = ImageIO.getImageReaders(iis);
if (!it.hasNext())
{
System.err.println("No reader for this format");
return;
}
ImageReader reader = (ImageReader) it.next();
reader.setInput(iis);
IIOMetadata meta = reader.getImageMetadata(0);
IIOMetadataNode root = (IIOMetadataNode) meta.getAsTree("javax_imageio_1.0");
NodeList nodes = root.getElementsByTagName("HorizontalPixelSize");
if (nodes.getLength() > 0)
{
IIOMetadataNode dpcWidth = (IIOMetadataNode) nodes.item(0);
NamedNodeMap nnm = dpcWidth.getAttributes();
Node item = nnm.item(0);
int xDPI = Math.round(25.4f/Float.parseFloat(item.getNodeValue()));
System.out.println("xDPI: " + xDPI);
}
else
System.out.println("xDPI: -");
if (nodes.getLength() > 0)
{
nodes = root.getElementsByTagName("VerticalPixelSize");
IIOMetadataNode dpcHeight = (IIOMetadataNode) nodes.item(0);
NamedNodeMap nnm = dpcHeight.getAttributes();
Node item = nnm.item(0);
int yDPI = Math.round(25.4f/Float.parseFloat(item.getNodeValue()));
System.out.println("yDPI: " + yDPI);
}
else
System.out.println("yDPI: -");
(David Thielenソース/インスピレーション)。
StringWriter xmlStringWriter = new StringWriter();
StreamResult streamResult = new StreamResult(xmlStringWriter);
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // http://stackoverflow.com/a/1264872/535646
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
DOMSource domSource = new DOMSource(root);
transformer.transform(domSource, streamResult);
System.out.println (xmlStringWriter);
私が面白い。この例が見つかりました::
ByteArrayInputStream bis = new
ByteArrayInputStream(uploadedFile.getContents());
Iterator<?> readers = ImageIO.getImageReadersByFormatName("jpg");
ImageReader reader = (ImageReader) readers.next();
IIOMetadata meta = reader.getImageMetadata(0);
Element tree = (Element) meta.getAsTree("javax_imageio_jpeg_image_1.0");
Element jfif = (Element)tree.getElementsByTagName("app0JFIF").item(0);
int dpiH = Integer.parseInt(jfif.getAttribute("Xdensity"));
int dpiV = Integer.parseInt(jfif.getAttribute("Ydensity"));
/* now test that (dpiH == dpiV) */
/* imports are:
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageInputStream;
import org.primefaces.model.UploadedFile;
import org.w3c.dom.Element;
*/
どのような画像の種類は、使用しているが、あなたがメタデータXMLで何だろ場合
、このコードを使用しますか? – mzjn
私はソリューションがすべての画像タイプをサポートできる必要があります。 – guhai