java - java检查图像是否为200dpi

标签 java image pdfbox

我想检查 pdf 中的图像是否为 200dpi,以及它是否为彩色,目前在 java 中我正在使用 pdfbox 从 PDF 中提取图像,但是如果我们可以使用 java 中的任何其他免费库来做到这一点,也可以。

在 Pdfbox 中,我能够获取 pdf 中存在的图像的 pdxObjectImage,但很多时候,从这些 pdf 中提取的图像中不存在元数据。

String key = (String) imageIter.next();
PDXObjectImage pdxObjectImage = (PDXObjectImage)pageImages.get(key);
PDMetadata metadata=pdxObjectImage.getMetadata();
if (metadata == null) {
    System.out.println("No Metadata found for this image.");
} else {                
    try {
        xmlInputStream = metadata.createInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
xmlInputStream = metadata.createInputStream();

这就是他们计算图像 dpi 的方法。为了确定它是否有颜色,我可以使用这个

pdxObjectImage.getColorSpace().getJavaColorSpace().isCS_sRGB()

或者他们有其他更好的技术来完成这两件事

我们如何在java中做到这一点。

最佳答案

我没有使用过pdfbox。但是如果您可以使用 pdfbox 从 pdf 中提取图像,那么您可以使用 apache common-imaging lib 用于进一步处理。使用这个库的优点是它提供了大量的图像操作。

示例代码片段可能对您有帮助 -

import java.io.File;
import java.io.IOException;

import org.apache.commons.imaging.ImageInfo;
import org.apache.commons.imaging.ImageReadException;
import org.apache.commons.imaging.Imaging;

public class ImageingTest{


    private static File fileName = new File("/home/razib/Desktop/img/cactus.jpg");

    private static ImageInfo imageInfo;

    public static void main(String[] args){

        int physicalWidthDpi = 0;
        int physicalHeightDpi = 0;

        try {


            imageInfo = Imaging.getImageInfo(fileName);
            physicalWidthDpi = imageInfo.getPhysicalWidthDpi();
            physicalHeightDpi = imageInfo.getPhysicalHeightDpi();

            System.out.println("File Name: " + fileName.getName() + " File Format: " +imageInfo.getFormatName());
            System.out.println("Dimension: " +imageInfo.getHeight() +"X"+ imageInfo.getWidth());
            System.out.println("physicalWidthDpi: " +physicalWidthDpi 
                    +"\nphysicalHeightDpi: " +physicalHeightDpi);

            System.out.println();
            System.out.println("COLOR_TYPE_BW: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_BW));
            System.out.println("COLOR_TYPE_CMYK: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_CMYK));
            System.out.println("COLOR_TYPE_GRAYSCALE: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_GRAYSCALE));
            System.out.println("COLOR_TYPE_RGB: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_RGB));
            System.out.println("COLOR_TYPE_YCbCr: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_YCbCr));
            System.out.println("COLOR_TYPE_YCC: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_YCC));
            System.out.println("COLOR_TYPE_YCCK: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_YCCK));
            System.out.println("COLOR_TYPE_OTHER: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_OTHER));
            System.out.println("COLOR_TYPE_UNKNOWN: " +(imageInfo.getColorType()==ImageInfo.COLOR_TYPE_UNKNOWN));

        } catch (ImageReadException e) {
            //Handle exception
            e.printStackTrace();
        } catch (IOException e) {
            //Handle exception
            e.printStackTrace();
        }
    }

}

关于java - java检查图像是否为200dpi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27729770/

相关文章:

java - 我们应该怎么做才能克服活锁呢? (一般情况和具体到下面提供的代码示例)

java - 从 Gallery 获取并上传时,ImageView 上的图像方向发生了变化

c++ - QML 和 C++ 图像互操作性

python - 将 .py 文件和图像转换为独立可执行文件

java - 使用java PDFBox将源pdf的页面复制(或重复)到另一个pdf

java - PDFBox U+00A0 在此字体编码中不可用

java - PDFBox 2.0.0 - 使用密码解密

java - 关于android源码中Swithpreference.java中的onBindview()方法

java - 在 Java 中使用 BufferedReader 获取输入

JAVA - getBytes 返回不带 BOM 的 UTF-8