【问题标题】:Retrieve Image Resolution(DPI) of an image (JPEG,PNG,SVG,GIF) without using any PHP extension在不使用任何 PHP 扩展的情况下检索图像(JPEG、PNG、SVG、GIF)的图像分辨率(DPI)
【发布时间】:2016-03-31 11:58:03
【问题描述】:

我想在不使用任何 PHP 扩展(如 imageMagick)的情况下检索图像(JPEG、PNG、SVG、GIF)的图像分辨率 (DPI)。我到处搜索,但找不到完美的解决方案。我试过下面的代码(来自link

function get_dpi($filename){
    $a = fopen($filename,'r');
    $string = fread($a,20);
    fclose($a);

    $data = bin2hex(substr($string,14,4));
    $x = substr($data,0,4);
    $y = substr($data,0,4);

    return array(hexdec($x),hexdec($y));
} 

但我没有得到正确的水平和垂直 DPI。比如我用了一张96dpi和96dpi的图片,却得到了(100,100)。而且这个函数只针对JPEG文件格式。

【问题讨论】:

  • 分辨率和 DPI 是两种不同的野兽。
  • SVG 图像的 DPI 是无限的。

标签: php svg resolution dpi image-resolution


【解决方案1】:

图像的 DPI 通常是虚构的。很少有最终渲染的物理尺寸实际上很重要的图像创建(就图像本身而言)。也就是说,DPI 信息存储在 JPEG 的 EXIF 数据中,因此您可以使用 the built-in PHP function 从那里读取它:

<?php
    $filename = "/Users/quentin/Dropbox/Camera Uploads/2016-03-30 21.01.09.jpg";
    $exif = exif_read_data($filename);
?>

DPI is <?php echo $exif["XResolution"] ?> by <?php echo $exif["YResolution"] ?>

【讨论】:

  • 您好昆汀,感谢您的回答。我检查了功能,但没有得到 DPI 信息。这是我尝试打印 exif 数据数组时得到的结果( [FileName] => 1.jpg [FileDateTime] => 1350899542 [FileSize] => 150695 [FileType] => 2 [MimeType] => image/jpeg [ SectionsFound] => IFD0, APP12 [COMPUTED] => 数组 ([html] => width="700" height="420" [Height] => 420 [Width] => 700 [IsColor] => 1 [ByteOrderMotorola] => 0 ) [公司] => Ducky [信息] => )
  • @Arun — 然后,据我所知,该文件没有指定要打印的大小。正如我所说,无论如何,DPI 通常都是虚构的。大多数人希望调整图像的大小以适合文档,或者调整图像的大小以适合打印机/显示器的 DPI/PPI,而不是关心图像认为它应该显示的大小(通常创建图像的人认为相同并且 DPI 仅由图形软件默认添加)。
  • 谢谢昆汀。然后我想,我必须使用 imagemagicks。
  • 如果没有任何 DPI 数据,那么使用其他工具获取它将无济于事。 (我不知道是否在其他地方存储了 DPI 数据,或者如果 ImageMagick 找不到,是否会应用默认值)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 2017-10-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多