当前位置:  开发笔记 > 编程语言 > 正文

使用PHP查找JPEG分辨率

如何解决《使用PHP查找JPEG分辨率》经验,为你挑选了2个好方法。

打电话给所有PHP大师!

我知道您可以使用getimagesize()来获取PHP中图像的实际像素高度和宽度.但是,如果您在Photoshop中打开图像并查看图像大小对话框,您会注意到有一个分辨率值决定了图像的打印尺寸.

给定一个任意的jpg图像文件,我需要使用PHP来确定这个分辨率.看来这个信息存储在某个地方的jpg文件中,所以我该怎么做呢?

另一个要求 - 我只有gdlib可供我使用.我需要在不使用其他php库的情况下执行此操作(imagemagick等)

谢谢您的帮助!



1> 小智..:

您可以直接读取JPEG文件,字节14-18指定:

字节14:01,X和Y密度单位指定符(00:无,像素比率,01:DPI,02:DPC)

字节15-16:水平像素密度,

字节16-18:垂直像素密度

另见:http://www.obrador.com/essentialjpeg/headerinfo.htm


@Rafe - 当然使用[filesystem functions](http://www.php.net/manual/en/ref.filesystem.php).图片也是人.

2> bleater..:

有两个地方可以存储分辨率(即打印时的JPEG分辨率,也简称为DPI或每英寸点数).

第一个是JPEG的JFIF标题,它通常(但不总是)在JPEG的开头.

另一个是EXIF数据.

请注意,分辨率数据通常不存在,因为它只有与物理输出大小相关的含义.例如,如果数码相机写入该值,则通常无意义.但是,当JPEG输出到打印机(例如)时,该值将具有意义.

下面是一些从JFIF头中获取它的代码,前提是它存在,并且位于APP0块中,这是文件中的第二个块.(第一个块总是SOI标记.):

function read_JFIF_dpi($filename)
{
    $dpi = 0;
    $fp = @fopen($filename, r);
    if ($fp) {
        if (fseek($fp, 6) == 0) { // JFIF often (but not always) starts at offset 6.
            if (($bytes = fread($fp, 16)) !== false) { // JFIF header is 16 bytes.
                if (substr($bytes, 0, 4) == "JFIF") { // Make sure it is JFIF header.
                    $JFIF_density_unit = ord($bytes[7]);
                    $JFIF_X_density = ord($bytes[8])*256 + ord($bytes[9]); // Read big-endian unsigned short int.
                    $JFIF_Y_density = ord($bytes[10])*256 + ord($bytes[11]); // Read big-endian unsigned short int.
                    if ($JFIF_X_density == $JFIF_Y_density) { // Assuming we're only interested in JPEGs with square pixels.
                        if ($JFIF_density_unit == 1) $dpi = $JFIF_X_density; // Inches.
                        else if ($JFIF_density_unit == 2) $dpi = $JFIF_X_density * 2.54; // Centimeters.
                    }
                }
            }
        }
        fclose($fp);
    }
    return ($dpi);
}

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有