当前位置: 首页> 最新文章列表> 使用imagecreatefrompng()时,怎样读取或处理图像的宽度和高度?

使用imagecreatefrompng()时,怎样读取或处理图像的宽度和高度?

M66 2025-06-28

在 PHP 中,imagecreatefrompng() 函数是用于创建一个图像资源(GD 图像资源)从 PNG 格式的图像文件。这个函数对于处理图像文件非常常见,尤其是在涉及动态图像生成、图像处理或图像编辑时。但是,很多开发者在使用 imagecreatefrompng() 创建图像资源之后,往往需要获取图像的宽度和高度来做进一步处理。

本文将详细介绍如何在使用 imagecreatefrompng() 函数时,读取和处理图像的宽度和高度。

1. 使用 imagesx()imagesy() 函数获取图像宽度和高度

PHP 提供了 imagesx()imagesy() 这两个函数来获取图像资源的宽度和高度。通过这两个函数,我们可以在调用 imagecreatefrompng() 创建图像资源后,获取该图像的具体尺寸。

示例代码:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 加载 PNG 图像文件</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-string">'path/to/your/image.png'</span></span><span>);

</span><span><span class="hljs-comment">// 获取图像的宽度</span></span><span>
</span><span><span class="hljs-variable">$width</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesx</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);

</span><span><span class="hljs-comment">// 获取图像的高度</span></span><span>
</span><span><span class="hljs-variable">$height</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);

</span><span><span class="hljs-comment">// 输出图像的宽度和高度</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"图像的宽度为: "</span></span><span> . </span><span><span class="hljs-variable">$width</span></span><span> . </span><span><span class="hljs-string">" 像素\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"图像的高度为: "</span></span><span> . </span><span><span class="hljs-variable">$height</span></span><span> . </span><span><span class="hljs-string">" 像素\n"</span></span><span>;

</span><span><span class="hljs-comment">// 销毁图像资源</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在这个示例中,首先使用 imagecreatefrompng() 函数加载图像文件,然后通过 imagesx() 获取图像的宽度,通过 imagesy() 获取图像的高度。最后,将图像的宽度和高度输出到浏览器。

2. 结合 getimagesize() 获取图像宽高

除了使用 imagesx()imagesy() 外,我们还可以使用 getimagesize() 函数来获取图像的宽度和高度。getimagesize() 不仅返回图像的尺寸,还会返回更多的图像信息,包括图像的 MIME 类型等。这对于需要处理文件信息的场景非常有用。

示例代码:

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 使用 getimagesize() 获取图像的宽度和高度</span></span><span>
</span><span><span class="hljs-variable">$image_info</span></span><span> = </span><span><span class="hljs-title function_ invoke__">getimagesize</span></span><span>(</span><span><span class="hljs-string">'path/to/your/image.png'</span></span><span>);

</span><span><span class="hljs-comment">// 获取图像的宽度</span></span><span>
</span><span><span class="hljs-variable">$width</span></span><span> = </span><span><span class="hljs-variable">$image_info</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>];

</span><span><span class="hljs-comment">// 获取图像的高度</span></span><span>
</span><span><span class="hljs-variable">$height</span></span><span> = </span><span><span class="hljs-variable">$image_info</span></span><span>[</span><span><span class="hljs-number">1</span></span><span>];

</span><span><span class="hljs-comment">// 输出图像的宽度和高度</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"图像的宽度为: "</span></span><span> . </span><span><span class="hljs-variable">$width</span></span><span> . </span><span><span class="hljs-string">" 像素\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"图像的高度为: "</span></span><span> . </span><span><span class="hljs-variable">$height</span></span><span> . </span><span><span class="hljs-string">" 像素\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在这里,getimagesize() 返回的是一个数组,数组的第一个元素($image_info[0])是图像的宽度,第二个元素($image_info[1])是图像的高度。

3. 处理图像的宽度和高度

在许多图像处理的场景中,我们可能需要根据图像的宽高进行某些处理。例如,调整图像的尺寸、裁剪图像等。通过获取图像的宽度和高度,我们可以实现这些功能。

3.1 图像缩放

如果我们需要将图像缩放到指定的宽度和高度,可以使用 imagecopyresampled() 函数。

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 加载图像文件</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-string">'path/to/your/image.png'</span></span><span>);

</span><span><span class="hljs-comment">// 获取原图的宽度和高度</span></span><span>
</span><span><span class="hljs-variable">$width</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesx</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-variable">$height</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);

</span><span><span class="hljs-comment">// 设置新的宽度和高度</span></span><span>
</span><span><span class="hljs-variable">$new_width</span></span><span> = </span><span><span class="hljs-number">200</span></span><span>;
</span><span><span class="hljs-variable">$new_height</span></span><span> = </span><span><span class="hljs-number">150</span></span><span>;

</span><span><span class="hljs-comment">// 创建一个新的空白图像</span></span><span>
</span><span><span class="hljs-variable">$new_image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-variable">$new_width</span></span><span>, </span><span><span class="hljs-variable">$new_height</span></span><span>);

</span><span><span class="hljs-comment">// 使用 imagecopyresampled() 进行图像缩放</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagecopyresampled</span></span><span>(</span><span><span class="hljs-variable">$new_image</span></span><span>, </span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$new_width</span></span><span>, </span><span><span class="hljs-variable">$new_height</span></span><span>, </span><span><span class="hljs-variable">$width</span></span><span>, </span><span><span class="hljs-variable">$height</span></span><span>);

</span><span><span class="hljs-comment">// 输出缩放后的图像</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$new_image</span></span><span>);

</span><span><span class="hljs-comment">// 销毁图像资源</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$new_image</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在这个例子中,我们加载了一个 PNG 图像,获取了它的宽高,并使用 imagecopyresampled() 函数将其缩放为指定的 200x150 的尺寸。最后,我们通过 imagepng() 输出缩放后的图像。

3.2 图像裁剪

如果我们想从图像中裁剪出某一部分,也可以根据宽度和高度进行相应的操作。

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 加载图像文件</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefrompng</span></span><span>(</span><span><span class="hljs-string">'path/to/your/image.png'</span></span><span>);

</span><span><span class="hljs-comment">// 获取图像的宽度和高度</span></span><span>
</span><span><span class="hljs-variable">$width</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesx</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-variable">$height</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagesy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);

</span><span><span class="hljs-comment">// 设置裁剪区域的坐标和尺寸</span></span><span>
</span><span><span class="hljs-variable">$x</span></span><span> = </span><span><span class="hljs-number">50</span></span><span>; </span><span><span class="hljs-comment">// 起始横坐标</span></span><span>
</span><span><span class="hljs-variable">$y</span></span><span> = </span><span><span class="hljs-number">50</span></span><span>; </span><span><span class="hljs-comment">// 起始纵坐标</span></span><span>
</span><span><span class="hljs-variable">$crop_width</span></span><span> = </span><span><span class="hljs-number">100</span></span><span>;
</span><span><span class="hljs-variable">$crop_height</span></span><span> = </span><span><span class="hljs-number">100</span></span><span>;

</span><span><span class="hljs-comment">// 创建一个新的空白图像</span></span><span>
</span><span><span class="hljs-variable">$cropped_image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatetruecolor</span></span><span>(</span><span><span class="hljs-variable">$crop_width</span></span><span>, </span><span><span class="hljs-variable">$crop_height</span></span><span>);

</span><span><span class="hljs-comment">// 使用 imagecopy() 进行裁剪</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagecopy</span></span><span>(</span><span><span class="hljs-variable">$cropped_image</span></span><span>, </span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-variable">$x</span></span><span>, </span><span><span class="hljs-variable">$y</span></span><span>, </span><span><span class="hljs-variable">$crop_width</span></span><span>, </span><span><span class="hljs-variable">$crop_height</span></span><span>);

</span><span><span class="hljs-comment">// 输出裁剪后的图像</span></span><span>
</span><span><span class="hljs-title function_ invoke__">header</span></span><span>(</span><span><span class="hljs-string">'Content-Type: image/png'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagepng</span></span><span>(</span><span><span class="hljs-variable">$cropped_image</span></span><span>);

</span><span><span class="hljs-comment">// 销毁图像资源</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$cropped_image</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在这个示例中,我们从图像中裁剪出从坐标 (50, 50) 开始,尺寸为 100x100 的区域,并将裁剪后的图像输出。

总结

使用 imagecreatefrompng() 加载图像文件后,获取图像的宽度和高度是图像处理中的基本需求。我们可以通过 imagesx()imagesy() 函数直接获取图像的宽高,或者使用 getimagesize() 获取图像的更多信息。在图像处理的实际应用中,宽高值常常用于调整尺寸、裁剪图像等操作,从而达到所需的效果。

以上是处理 PNG 图像时读取宽度和高度的基本方法和技巧,了解这些函数后,你可以在 PHP 中更好地进行图像处理。