当前位置: 首页 > 知识库问答 >
问题:

在java中检查图像是否在200dpi中

窦英武
2023-03-14

我想检查一个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中做到这一点。

共有1个答案

哈骞仕
2023-03-14

我没有用过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();
        }
    }

}
 类似资料:
  • 问题内容: 我正在通过jQuery $ .ajax加载图像路径,并在显示图像之前先检查它是否确实存在。我可以使用图像加载/就绪事件或类似的方法来确定文件路径有效吗? 将.myimage设置为显示:无,我希望这样做 这样有可能吗? 问题答案: 好吧,你可以绑定处理程序… 像这样, 好吧,您已经可以使用load-event 问题是如果禁用Javascript,图像将永远不会显示…

  • 问题内容: 我先画了一条线,然后画了一个点,然后我要检查该点是否在线上。我已经在数组中取得了一条线坐标(因为有多条线)。我想在最后一行检查当前点吗? 问题是当一点在直线的起点附近或直线大约在m1和c1的垂直值相差很大时。因此,检测点是否在线上存在一个问题。我如何检查这种情况? 问题答案: 如果点(xP,yP)在从(x1,y1)到(x2,y2)的线段上,则返回0.0。 对无限行执行相同的操作。

  • 问题内容: 我正在用python编写OpenCV程序,在某些时候我有类似的东西 问题是我必须在继续之前检测是否正确读取了图像文件。如果无法打开图像,则返回,所以我想做些类似的事情: 如果未打开图像(例如,文件不存在),则等于(预期)。但是,当工作时,条件将中断: 即,返回的值不能用作布尔值。问题似乎是如果成功则返回numpy.ndarray,否则返回(布尔值)。 到目前为止,我的解决方案涉及使用返

  • 问题内容: 无论如何,通过将其与给定的字符串进行比较来检查是否存在枚举?我似乎找不到任何这样的功能。我可以尝试使用该方法并捕获异常,但是据我了解,捕获运行时异常不是一种好习惯。有人有什么想法吗? 问题答案: 我不认为没有捕获异常的内置方法。您可以改用如下方式: 编辑: 正如乔恩·斯凯特(Jon Skeet)所述,每次调用时,都会通过克隆私有支持数组来工作。如果性能至关重要,则可能只需要调用一次,缓

  • 问题内容: 我需要查看CDN上是否存在特定图像。 我尝试了以下方法,但不起作用: 即使图像存在或不存在,它始终会显示“文件存在”。我不确定为什么它不起作用… 问题答案: 您至少需要使用引号将文件名括起来(作为字符串): 另外,请确保已正确验证。然后,只有在您的PHP配置中将其激活时,它才起作用

  • 问题内容: 我正在使用JAI并使用以下文件创建文件: 我在该行之前检查文件是否存在。但是,如何检查文件是.bmp还是.tiff还是图像文件? 有人知道吗? 问题答案: Image Magick项目具有识别图像的功能,并且有一个用于Image Magick的Java包装器,称为JMagick,我认为您可能需要考虑而不是重新发明轮子: http://www.jmagick.org 我一直在使用Imag