getimagesize

(PHP 4, PHP 5, PHP 7, PHP 8)

getimagesize获取图像大小

描述

getimagesize(string $filename, array &$image_info = null): array|false

getimagesize() 函数将确定任何支持的给定图像文件的大小,并返回尺寸以及文件类型和一个 height/width 文本字符串,该字符串将在普通 HTML IMG 标记和相应的 HTTP 内容类型中使用。

getimagesize() 也可以在 image_info 参数中返回更多信息。

注意

此函数期望 filename 是一个有效的图像文件。如果提供非图像文件,它可能会被错误地检测为图像,函数将成功返回,但数组可能包含无意义的值。

不要使用 getimagesize() 检查给定文件是否为有效图像。请改用专门的解决方案,例如 Fileinfo 扩展。

注意: 请注意,JPC 和 JP2 能够拥有具有不同位深度的组件。在这种情况下,“bits”的值是遇到的最高位深度。此外,JP2 文件可能包含 多个 JPEG 2000 码流。在这种情况下,getimagesize() 将返回它在文件根目录中遇到的第一个码流的值。

注意: 关于图标的信息是从具有最高比特率的图标中检索的。

注意: GIF 图像由一个或多个帧组成,其中每个帧可能只占据图像的一部分。getimagesize() 报告的图像大小是整个大小(从逻辑屏幕描述符中读取)。

参数

filename

此参数指定您要检索有关其信息的 文件。它可以引用本地文件或(在配置允许的情况下)使用 支持的流 之一来引用远程文件。

image_info

此可选参数允许您从图像文件中提取一些扩展信息。目前,这将返回不同的 JPG APP 标记,作为关联数组。一些程序使用这些 APP 标记将文本信息嵌入到图像中。一个非常常见的是在 APP13 标记中嵌入 » IPTC 信息。您可以使用 iptcparse() 函数将二进制 APP13 标记解析为可读内容。

注意:

image_info 仅支持 JFIF 文件。

返回值

返回一个最多包含 7 个元素的数组。并非所有图像类型都将包含 channelsbits 元素。

索引 0 和 1 分别包含图像的宽度和高度。

注意:

某些格式可能不包含图像或可能包含多个图像。在这些情况下,getimagesize() 可能无法正确确定图像大小。在这些情况下,getimagesize() 将返回宽度和高度为零。

索引 2 是 IMAGETYPE_XXX 常量 之一,指示图像的类型。

索引 3 是一个文本字符串,包含可以在 IMG 标记中直接使用的正确 height="yyy" width="xxx" 字符串。

mime 是图像的相应 MIME 类型。此信息可用于使用正确的 HTTP Content-type 标头提供图像

示例 #1 getimagesize() 和 MIME 类型

<?php
$size
= getimagesize($filename);
$fp = fopen($filename, "rb");
if (
$size && $fp) {
header("Content-type: {$size['mime']}");
fpassthru($fp);
exit;
} else {
// error
}
?>

channels 对于 RGB 图片将是 3,对于 CMYK 图片将是 4。

bits 是每种颜色的位数。

对于某些图像类型,channelsbits 值的存在可能会令人困惑。例如,GIF 始终为每个像素使用 3 个通道,但对于具有全局颜色表的动画 GIF,无法计算每个像素的位数。

如果失败,将返回 false

错误/异常

如果无法访问 filename 图像,getimagesize() 将生成级别为 E_WARNING 的错误。在读取错误时,getimagesize() 将生成级别为 E_NOTICE 的错误。

变更日志

版本 描述
8.2.0 现在返回 AVIF 图像的实际图像尺寸、位数和通道;之前,尺寸被报告为 0x0,而位数和通道则根本没有报告。
7.1.0 添加了 WebP 支持。

示例

示例 #2 getimagesize() 示例

<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo
"<img src=\"img/flag.jpg\" $attr alt=\"getimagesize() example\" />";
?>

示例 #3 getimagesize (URL)

<?php
$size
= getimagesize("http://www.example.com/gifs/logo.gif");

// 如果文件名中包含空格,请正确编码它
$size = getimagesize("http://www.example.com/gifs/lo%20go.gif");

?>

示例 #4 getimagesize() 返回 IPTC

<?php
$size
= getimagesize("testimg.jpg", $info);
if (isset(
$info["APP13"])) {
$iptc = iptcparse($info["APP13"]);
var_dump($iptc);
}
?>

注释

注意:

此函数不需要 GD 图像库。

参见

添加注释

用户贡献笔记 24 个笔记

james dot relyea at zifiniti dot com
15 年前
如下所述,getimagesize 会在检查所需信息之前下载整个图像。对于远程访问的大图像来说,这非常慢。由于宽度/高度在文件的开头几个字节中,因此不需要下载整个文件。我编写了一个函数,通过流式传输字节来获取 JPEG 的大小,直到找到适当的数据来报告宽度和高度。

<?php
// 获取 JPEG 宽度和高度,无需下载/读取整个图像。
function getjpegsize($img_loc) {
$handle = fopen($img_loc, "rb") or die("无效的文件流。");
$new_block = NULL;
if(!
feof($handle)) {
$new_block = fread($handle, 32);
$i = 0;
if(
$new_block[$i]=="\xFF" && $new_block[$i+1]=="\xD8" && $new_block[$i+2]=="\xFF" && $new_block[$i+3]=="\xE0") {
$i += 4;
if(
$new_block[$i+2]=="\x4A" && $new_block[$i+3]=="\x46" && $new_block[$i+4]=="\x49" && $new_block[$i+5]=="\x46" && $new_block[$i+6]=="\x00") {
// 读取块大小并跳到前面,开始循环遍历块以搜索 SOF 标记
$block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]);
$block_size = hexdec($block_size[1]);
while(!
feof($handle)) {
$i += $block_size;
$new_block .= fread($handle, $block_size);
if(
$new_block[$i]=="\xFF") {
// 检测到新块,检查 SOF 标记
$sof_marker = array("\xC0", "\xC1", "\xC2", "\xC3", "\xC5", "\xC6", "\xC7", "\xC8", "\xC9", "\xCA", "\xCB", "\xCD", "\xCE", "\xCF");
if(
in_array($new_block[$i+1], $sof_marker)) {
// 检测到 SOF 标记。宽度和高度信息包含在这个字节之后的 4-7 字节中。
$size_data = $new_block[$i+2] . $new_block[$i+3] . $new_block[$i+4] . $new_block[$i+5] . $new_block[$i+6] . $new_block[$i+7] . $new_block[$i+8];
$unpacked = unpack("H*", $size_data);
$unpacked = $unpacked[1];
$height = hexdec($unpacked[6] . $unpacked[7] . $unpacked[8] . $unpacked[9]);
$width = hexdec($unpacked[10] . $unpacked[11] . $unpacked[12] . $unpacked[13]);
return array(
$width, $height);
} else {
// 跳过块标记并读取块大小
$i += 2;
$block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]);
$block_size = hexdec($block_size[1]);
}
} else {
return
FALSE;
}
}
}
}
}
return
FALSE;
}
?>
nikolam3244 at gmail dot com
6 年前
这里有一个代码片段,用于通过获取文件的开头几个字节来获取 JPEG 图像尺寸,但它不适用于 PNG 文件,所以我写了一个。它只下载前 24 个字节,而不是整个图像,因此比 getimagesize() 快得多,并且可以节省带宽。

<?php
// 不下载或读取整个图像,检索 PNG 图像的宽度和高度。
function getpngsize( $img_loc ) {
$handle = fopen( $img_loc, "rb" ) or die( "Invalid file stream." );

if ( !
feof( $handle ) ) {
$new_block = fread( $handle, 24 );
if (
$new_block[0] == "\x89" &&
$new_block[1] == "\x50" &&
$new_block[2] == "\x4E" &&
$new_block[3] == "\x47" &&
$new_block[4] == "\x0D" &&
$new_block[5] == "\x0A" &&
$new_block[6] == "\x1A" &&
$new_block[7] == "\x0A" ) {
if (
$new_block[12] . $new_block[13] . $new_block[14] . $new_block[15] === "\x49\x48\x44\x52" ) {
$width = unpack( 'H*', $new_block[16] . $new_block[17] . $new_block[18] . $new_block[19] );
$width = hexdec( $width[1] );
$height = unpack( 'H*', $new_block[20] . $new_block[21] . $new_block[22] . $new_block[23] );
$height = hexdec( $height[1] );

return array(
$width, $height );
}
}
}

return
false;
}
?>
tomasz at trejderowski dot pl
10 年前
如果您想将“getimagesize()”函数返回的“2”索引的值“转换为”更人性化的内容,您可以考虑使用类似于此的函数

$imageTypeArray = array
(
0=>'UNKNOWN',
1=>'GIF',
2=>'JPEG',
3=>'PNG',
4=>'SWF',
5=>'PSD',
6=>'BMP',
7=>'TIFF_II',
8=>'TIFF_MM',
9=>'JPC',
10=>'JP2',
11=>'JPX',
12=>'JB2',
13=>'SWC',
14=>'IFF',
15=>'WBMP',
16=>'XBM',
17=>'ICO',
18=>'COUNT'
);

$size = getimagesize($filename);

$size[2] = $imageTypeArray[$size[2]];

或类似的东西。
php dot net at dannysauer dot com
19 年前
请注意,如果你想成为一名优秀的程序员,并使用命名常量(IMAGETYPE_JPEG)而不是其值(2),你应该使用 IMAGETYPE 变量 - IMAGETYPE_JPEG、IMAGETYPE GIF、IMAGETYPE_PNG 等。由于某种原因,有人做了一个糟糕的决定,在我的 PHP 版本中,IMG_PNG 实际上是 4,而 IMAGETYPE_PNG 是 3。我花了一段时间才弄清楚为什么将类型与 IMG_PNG 进行比较会失败......
simon dot waters at surevine dot com
9 年前
注意:getimage size 不会尝试验证图像文件格式

格式错误的 GIF 图像可能包含 PHP 代码,但仍具有有效的尺寸。

程序员需要确保使用其他工具验证此类图像,或者从不将其视为 PHP 或其他可执行类型(强制执行适当的扩展名,避免用户控制重命名,将上传的图像限制在未启用 PHP 的网站区域)。

http://ha.ckers.org/blog/20070604/passing-malicious-php-through-getimagesize/
redcore at gmail dot com
17 年前
在尝试将图像上传到服务器或数据库时,检查图像的尺寸总是一个好习惯...特别是如果它要显示在无法容纳特定尺寸以外图像的页面上。

<?php

$tmpName
= $_FILES['userfile']['tmp_name'];

list(
$width, $height, $type, $attr) = getimagesize($tmpName);

if(
$width>275 || $height>275)
{
die(
"exceeded image dimension limits.");
}

?>
utilmind
13 年前
以下函数可以确定 PNG 图像是否包含 alpha 通道。

<?php
function is_alpha_png($fn){
return (
ord(@file_get_contents($fn, NULL, NULL, 25, 1)) == 6);
}
?>

PNG 图像的颜色类型存储在字节偏移量 25 处。第 25 个字节的可能值为
* 0 - 灰度
* 2 - RGB
* 3 - 带调色板的 RGB
* 4 - 灰度 + alpha
* 6 - RGB + alpha
info at alex-lawrence dot com
16 年前
可能有用(不知道该贴在哪里)

function getImageErrors( $filename, $type = "", $minWidth = 0, $minHeight = 0, $maxWidth = 0, $maxHeight = 0, $maxFileSize = 0 )
{
$errors = array();
if ( file_exists( $filename ) )
{
$ending = substr( $filename, strpos( $filename, "." ) );
if ( is_array( $type ) )
{
$isTypeOf = false;
foreach( $type as $eachtype )
{
if ( $ending == $eachtype )
{
$isTypeOf = true;
}
}
if ( ! $isTypeOf )
{
$errors[ 'type' ] = $ending;
}
}
elseif ( $type != "" )
{
if ( $ending != $type )
{
$errors[ 'type' ] = $ending;
}
}
$size = getimagesize( $filename );
if ( $size[ 0 ] < $minWidth )
{
$errors[ 'minWidth' ] = $size[ 0 ];
}
if ( $size[ 1 ] < $minHeight )
{
$errors[ 'minHeight' ] = $size[ 1 ];
}
if ( ( $maxWidth > $minWidth ) && ( $size[ 0 ] > $maxWidth ) )
{
$errors[ 'maxWidth' ] = $size[ 0 ];
}
if ( ( $maxHeight > $minHeight ) && ( $size[ 1 ] > $maxHeight ) )
{
$errors[ 'maxHeight' ] = $size[ 1 ];
}
if ( ( $maxFileSize > 0 ) && ( filesize( $filename ) > $maxFileSize ) )
{
$errors[ 'maxFileSize' ] = filesize( $filename );
}
}
else
{
$errors[ 'filename' ] = "not existing";
}
return ( count( $errors ) > 0 ? $errors : null );
}
Steve
13 年前
定义的 IMAGETYPE_ 常量列表在 exif_imagetype 的手册页面上

https://php.net/manual/en/function.exif-imagetype.php
shmohel at gmail dot com
16 年前
与其创建一个冗长的函数,它本质上运行两次(一次作为宽度,一次作为高度),我还想到了一个有用的函数,它使用可变变量来设置最大高度/宽度。希望有人觉得这很有用。

function scaleimage($location, $maxw=NULL, $maxh=NULL){
$img = @getimagesize($location);
if($img){
$w = $img[0];
$h = $img[1];

$dim = array('w','h');
foreach($dim AS $val){
$max = "max{$val}";
if(${$val} > ${$max} && ${$max}){
$alt = ($val == 'w') ? 'h' : 'w';
$ratio = ${$alt} / ${$val};
${$val} = ${$max};
${$alt} = ${$val} * $ratio;
}
}

return("<img src='{$location}' alt='image' width='{$w}' height='{$h}' />");
}
}
info at personalmis dot com
16 年前
看来人们尝试按比例缩放图像(放大或缩小)的各种方法,如果一个人记住了代数,可能会更直接。

公式是 y = mx,其中 m 是直线的斜率。这是 y:x 的比率,即 m = y/x。

所以如果...

// x 和 y 的最大值
$y_max = 600;
$x_max = 800;

// 图像大小
$y1 = 2000;
$x1 = 3000;

// 使用宽度进行缩放
if ($x1 > $x_max)
{
// 找到斜率
$m = $y1/$x1;
// 将 x 边设置为最大值
$x2 = $x_max;
// 将 y 边设置为比例大小
$y2 = $m * $x1;
}

新图像按比例缩放将为 x2 = 800,y2 = 533(四舍五入)。

要从 y 侧进行操作,只需反转 x 和 y。
geoff at spacevs dot com
14 年前
此函数从字符串中返回 JPEG 图像的宽度和高度,允许在将图像写入磁盘之前检索存储在数据库中的图像的尺寸,或者使用“imagecreatefromstring”,与之相比,后者速度非常慢。

<?PHP
function getJPEGImageXY($data) {
$soi = unpack('nmagic/nmarker', $data);
if (
$soi['magic'] != 0xFFD8) return false;
$marker = $soi['marker'];
$data = substr($data, 4);
$done = false;

while(
1) {
if (
strlen($data) === 0) return false;
switch(
$marker) {
case
0xFFC0:
$info = unpack('nlength/Cprecision/nY/nX', $data);
return array(
$info['X'], $info['Y']);
break;

default:
$info = unpack('nlength', $data);
$data = substr($data, $info['length']);
$info = unpack('nmarker', $data);
$marker = $info['marker'];
$data = substr($data, 2);
break;
}
}
}
?>

执行 10,000 次需要 0.43 秒,而使用 imagecreatefromstring/imagesx/imagesy 执行相同操作大约需要 1.52 秒。

在处理文件时不要使用此函数代替 getimagesize,getimagesize 速度快得多,只需要 0.15 秒。
cloned at clonedmadman dot com
16 年前
好吧,我正在制作一个在上传时调整图像大小的脚本,但是,我正在制作一个多文件上传器,所以遇到一个问题:如何高效地获取图片的高度和宽度,并将它们存储在数组中以便稍后进行调整大小。这就是我想出来的方法

<?php
$links
= array("test1.jpg", "test2.png");
$sizearray = array();
$count = count($links);
for(
$i = 0; $i < $count; $i++) {
$size = getimagesize($links[$i]);
list(
$width, $height) = $size;
$sizearray[$links[$i]] = array("width" => $width, "height" => $height);
}
print_r($sizearray);
// 这将输出:Array ( [test1.jpg] => Array ( [width] => 300 [height] => 400 ) [test2.png] => Array ( [width] => 680 [height] => 100 ) )
?>
diablx at hotmail dot com
20 年前
对于其他脚本,我感到抱歉,但我犯了一个关于图像调整大小的错误... 这是一个有效的脚本!
<?
// 一些配置变量!
$maxWidth = 90;
$maxHeight = 90;
$maxCols = 8;
$webDir = "https://localhost/images/";
$localDir = $_SERVER['DOCUMENT_ROOT']."/images/";

$AutorisedImageType = array ("jpg", "jpeg", "gif", "png");
?>

<center>
<table border='1' cellspacing='5' cellpadding='5' style="border-collapse:collapse; border-style: dotted">
<tr>
<?
// 打开 localDir
$dh = opendir($localDir);
while (false !== ($filename = readdir($dh))) {
$filesArray[] = $filename;
}

// 显示和调整大小
foreach ($filesArray as $images) {

$ext = substr($images, strpos($images, ".")+1, strlen($images));

if( in_array($ext, $AutorisedImageType) ) {

list($width, $height, $type, $attr) = @getimagesize( $localDir.$images );

$xRatio = $maxWidth / $width;
$yRatio = $maxHeight / $height;

if ( ($width <= $maxWidth) && ($height <= $maxHeight) ) {
$newWidth = $width;
$newHeight = $height;
}
else if (($xRatio * $height) < $maxHeight) {
$newHeight = ceil($xRatio * $height);
$newWidth = $maxWidth;
}
else {
$newWidth = ceil($yRatio * $width);
$newHeight = $maxHeight;
}

if($i == $maxCols) {
echo "</tr><tr>";
$i = 0;
}
echo "<td align='center' valign='middle' width='$maxWidth' height='$maxHeight'><img src='".$webDir.$images."' width='$newWidth' height='$newHeight'></td>";
$i++;
}
}
?>
</tr>
</table>
</center>
kazuya
10 年前
我创建了函数 img_resize($path,$tmp_name,$new_name,$new_width)
这可能会有用。

<?php

$new_file
= img_resize("./img/", "test.jpg","copy_test.jpg",300);
echo
"<IMG src = '$new_file'>";

function
img_resize($path,$tmp_name,$new_name,$new_width){
if (!
file_exists($path.$filename)){
echo
"文件未找到!";
exit;
}
if (!
is_writable($path)){
echo
"错误:权限被拒绝!";
exit;
}
list(
$width, $height) = getimagesize($path . $tmp_name);
$new_height = abs($new_width * $height / $width);
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($path . $tmp_name);
imagecopyresampled($image_p, $image, 0, 0, 0, 0,
$new_width, $new_height, $width, $height);
imagejpeg($image_p, $path . $new_name);
return
$path.$new_name;
}

?>
alexyam at live dot com
12 年前
我想在数据库中以 blob 数据形式存储的 .SWF 文件上使用 getimagesize(),但找不到简单的解决方案,所以我自己创建了一个。

我正在根据 MIT 许可证发布此代码,以节省大家的时间

<?php
/*
----------------------------------------------------------------------
PHP Blob 数据作为文件流 v1.0 (C) 2012 Alex Yam <[email protected]>
本代码在 MIT 许可证下发布。
----------------------------------------------------------------------
[摘要]

一个简单的 PHP 类,用于使用流包装器将 blob 数据作为文件进行读写。

对于运行 getimagesize() 以获取存储在数据库中作为 blob 数据的 .SWF Flash 文件的宽度和
高度特别有用。

在 PHP 5.3.10 上测试。

----------------------------------------------------------------------
[用法示例]

//包含
include('./blob_data_as_file_stream.php');

//注册流包装器
stream_wrapper_register("BlobDataAsFileStream", "blob_data_as_file_stream");

//从 Adobe 网站获取 .SWF 文件并将其存储到变量中。
//用您自己的从数据库中获取 SWF blob 数据的代码替换此代码。
$swf_url = 'http://www.adobe.com/swf/software/flash/about/flashAbout_info_small.swf';
$swf_blob_data = file_get_contents($swf_url);

//将 $swf_blob_data 存储到数据流中
blob_data_as_file_stream::$blob_data_stream = $swf_blob_data;

//在数据流上运行 getimagesize()
$swf_info = getimagesize('BlobDataAsFileStream://');
var_dump($swf_info);

----------------------------------------------------------------------
[用法输出]

array(5) {
[0]=>
int(159)
[1]=>
int(91)
[2]=>
int(13)
[3]=>
string(23) "width="159" height="91""
["mime"]=>
string(29) "application/x-shockwave-flash"
}

*/

class blob_data_as_file_stream {

private static
$blob_data_position = 0;
public static
$blob_data_stream = '';

public static function
stream_open($path,$mode,$options,&$opened_path){
static::
$blob_data_position = 0;
return
true;
}

public static function
stream_seek($seek_offset,$seek_whence){
$blob_data_length = strlen(static::$blob_data_stream);
switch (
$seek_whence) {
case
SEEK_SET:
$new_blob_data_position = $seek_offset;
break;
case
SEEK_CUR:
$new_blob_data_position = static::$blob_data_position+$seek_offset;
break;
case
SEEK_END:
$new_blob_data_position = $blob_data_length+$seek_offset;
break;
default:
return
false;
}
if ((
$new_blob_data_position >= 0) AND ($new_blob_data_position <= $blob_data_length)){
static::
$blob_data_position = $new_blob_data_position;
return
true;
}else{
return
false;
}
}

public static function
stream_tell(){
return static::
$blob_data_position;
}

public static function
stream_read($read_buffer_size){
$read_data = substr(static::$blob_data_stream,static::$blob_data_position,$read_buffer_size);
static::
$blob_data_position += strlen($read_data);
return
$read_data;
}

public static function
stream_write($write_data){
$write_data_length=strlen($write_data);
static::
$blob_data_stream = substr(static::$blob_data_stream,0,static::$blob_data_position).
$write_data.substr(static::$blob_data_stream,static::$blob_data_position+=$write_data_length);
return
$write_data_length;
}

public static function
stream_eof(){
return static::
$blob_data_position >= strlen(static::$blob_data_stream);
}

}
?>
ajreading at classixshop dot com
19 年前
我写的一段简单的代码,用于按比例调整图像的大小,使其最大高度和宽度,然后显示它

<?php
// 最大高度和宽度
$max_width = 100;
$max_height = 100;

// 您 jpeg 的路径

$upfile '/path/to/file.jpg';
Header("Content-type: image/jpeg");

$size = GetImageSize($upfile); // 读取大小
$width = $size[0];
$height = $size[1];

// 按比例将图像调整为
// 上述指定的最大尺寸

$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;

if( (
$width <= $max_width) && ($height <= $max_height) )
{
$tn_width = $width;
$tn_height = $height;
}
elseif ((
$x_ratio * $height) < $max_height)
{
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
else
{
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
// 增加内存限制以支持更大的文件

ini_set('memory_limit', '32M');

// 创建新图像!
$src = ImageCreateFromJpeg($upfile);
$dst = ImageCreateTrueColor($tn_width, $tn_height);
ImageCopyResized($dst, $src, 0, 0, 0, 0, $tn_width, $tn_height, $width, $height);
ImageJpeg($dst);
// 销毁图像
ImageDestroy($src);
ImageDestroy($dst);
?>
freecorvette at gmail dot com
6 年前
对于某些图像,使用没有第二个参数的 getimagesize() 将返回正确的信息,但当您添加第二个参数时,它将返回 false。这很可能是一个错误(而且已经报告过),但与此同时,如果您遇到此问题,可以使用 exif_read_data() 作为解决方法。
Jesus Zamora
13 年前
返回一个包含 4 个元素的数组。
索引 0 是图像的宽度(以像素为单位)。
索引 1 是图像的高度(以像素为单位)。
索引 2 是图像类型的标志

1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel 字节顺序),8 = TIFF(motorola 字节顺序),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。

索引 3 包含 ' height="yyy" width="xxx" '
anonymous
15 年前
请注意,如果您指定一个远程文件(通过 URL)来检查其大小,PHP 首先会将远程文件下载到您的服务器。

如果您使用此函数来检查用户提供的图像链接的大小,这可能构成安全风险。恶意用户可能会链接到非常大的图像文件,并导致 PHP 下载它。我不知道是否有任何文件大小限制适用于下载。但假设用户提供了一个链接到大小为几 GB 的图像?

如果有一种方法可以限制此函数执行的下载大小,那就太好了。希望已经有默认值,并且有一些合理的限制。
mail at soylentgreens dot com
19 年前
关于裁剪图像,您不妨试试这个...

<?php

$imgfile
= "img.jpg";
$cropStartX = 300;
$cropStartY = 250;
$cropW = 200;
$cropH = 200;

// 创建两个图像
$origimg = imagecreatefromjpeg($imgfile);
$cropimg = imagecreatetruecolor($cropW,$cropH);

// 获取原始大小
list($width, $height) = getimagesize($imgfile);

// 裁剪
imagecopyresized($cropimg, $origimg, 0, 0, $cropStartX, $cropStartY, $width, $height, $width, $height);

// TODO: 编写代码以保存新图像
// 或者,像这样直接显示它:
header("Content-type: image/jpeg");
imagejpeg($cropimg);

// 销毁图像
imagedestroy($cropimg);
imagedestroy($origimg);

?>
user at example dot net
16 年前
验证图像时,始终检查图像类型 *和* 文件扩展名!

因为大多数图像类型允许用于注释或其他无关数据的节。这些节可用于将 PHP 代码注入服务器。如果这些文件按客户端发送的方式存储,则具有“.php”扩展名的文件可以被执行并造成重大危害。
pfarthing at hotmail dot com
16 年前
更正:要找到 $y2,应该使用...

// 将 y 边设置为比例大小
$y2 = $m * $x_max; // 不是 $x1

感谢 Norbert =)
Coodiss at w3bbix dot net
19 年前
这里有一个将图像缩放到其所在 <td> 中的简单方法
* 为了便于理解,代码已分成多行 :)*

<?
$imageinfo = getimagesize("images/picture.jpg");

$ix=$imageinfo[0];
$iy=$imageinfo[1];

$widthscale = $ix/175; //<TD> WIDTH
$heightscale = $iy/175; //<TD> HEIGHT

if($widthscale < 1)
$nwidth = $ix*$widthscale;
else
$nwidth = $ix/$widthscale;

if($heightscale < 1)
$nheight = $iy*$heightscale;
else
$nheight = $iy/$heightscale;

?>
To Top