检查图像是否为JPEG

8 php image

我需要检查给定的图像是否是JPEG.

if ($_FILES["fname"]["error"] > 0) {
    $imgData = "hyperlink/holder.jpg";
} else {
    $imgData ="hyperlink/" . $_FILES["fname"]["name"];
}
// Only accept jpg images
// pjpeg is for Internet Explorer should be jpeg
if (!($_FILES["fname"]["type"] == "image/pjpeg") ) {
    print "I only accept jpg files!";
    exit(0);
}
Run Code Online (Sandbox Code Playgroud)

当它转到第一个if语句中的第一个语句时,它总是给我只接受jpg文件!

我该如何解决?

Mit*_*aro 24

试试exif_imagetype图像功能.

例:

if(exif_imagetype($filepath) != IMAGETYPE_JPEG){
    echo 'Not a JPEG image';
}
Run Code Online (Sandbox Code Playgroud)


CMP*_*CMP 6

我相信以下方法有效:

\n\n

另请注意:

\n\n
\n

(exif_imagetype($ImagePathAndName) == IMAGETYPE_JPEG)

\n
\n\n

仅读取前几个字节以查找图像标头,因此不足以确认图像是否已损坏。

\n\n

下面我将其放在逻辑 \xe2\x80\x9cand\xe2\x80\x9d 语句中,即必须通过这两个测试才能使图像符合有效且未损坏的条件等:

\n\n
if ((exif_imagetype($ImagePathAndName) == IMAGETYPE_JPEG) && (imagecreatefromjpeg( $ImagePathAndName ) !== false ))\n{\necho 'The picture is a valid jpg<br>';\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:您需要将此行代码放在 php 代码的顶部,以避免在遇到假/损坏的图像文件时看到来自 imagecreatefromjpeg( $ImagePathAndName ) 的警告消息。

\n\n
ini_set(\xe2\x80\x98gd.jpeg_ignore_warning\xe2\x80\x99, 1);\n
Run Code Online (Sandbox Code Playgroud)\n


Sco*_*den 5

PHP 有这么好的图像类型支持,我想知道你为什么限制你的应用程序。只需几行代码,您就可以处理任何输入格式并转换为 jpeg,如果需要的话...

$im = imagecreatefrompng(input_filename)
imagejpeg($im, output_filename);
Run Code Online (Sandbox Code Playgroud)