php – 如何检查jpeg是否适合内存?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 如何检查jpeg是否适合内存?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1708字,纯文字阅读大概需要3分钟。
内容图文
![php – 如何检查jpeg是否适合内存?](/upload/InfoBanner/zyjiaocheng/967/b0f097f153ad4c48bcb8e6b7cb6aafb7.jpg)
使用imagecreatefromjpeg打开JPEG图像很容易导致致命错误,因为所需的内存会占用memory_limit.
小于100Kb的.jpg文件很容易超过2000×2000像素 – 打开时大约需要20-25MB的内存. “相同的”2000x2000px映像可能会使用不同的压缩级别占用磁盘上的5MB.
所以我显然不能使用filesize来确定它是否可以安全打开.
如何在打开文件之前确定文件是否适合内存,这样我可以避免致命错误?
解决方法:
根据几个来源,所需的存储器每个像素最多5个字节,这取决于几个不同的因素,例如位深度.我自己的测试证实这是大致正确的.
最重要的是,需要考虑一些开销.
但是通过检查图像尺寸 – 可以在不加载图像的情况下轻松完成 – 我们可以粗略估计所需的内存并将其与可用内存(估计值)进行比较,如下所示:
$filename = 'black.jpg';
//Get image dimensions
$info = getimagesize($filename);
//Each pixel needs 5 bytes, and there will obviously be some overhead - In a
//real implementation I'd probably reserve at least 10B/px just in case.
$mem_needed = $info[0] * $info[1] * 6;
//Find out (roughly!) how much is available
// - this can easily be refined, but that's not really the point here
$mem_total = intval(str_replace(array('G', 'M', 'K'), array('000000000', '000000', '000'), ini_get('memory_limit')));
//Find current usage - AFAIK this is _not_ directly related to
//the memory_limit... but it's the best we have!
$mem_available = $mem_total - memory_get_usage();
if ($mem_needed > $mem_available) {
die('That image is too large!');
}
//Do your thing
$img = imagecreatefromjpeg('black.jpg');
这只是表面上的测试,因此我建议使用许多不同的图像进行进一步测试,并使用这些函数检查计算在特定环境中是否相当正确:
//Set some low limit to make sure you will run out
ini_set('memory_limit', '10M');
//Use this to check the peak memory at different points during execution
$mem_1 = memory_get_peak_usage(true);
内容总结
以上是互联网集市为您收集整理的php – 如何检查jpeg是否适合内存?全部内容,希望文章能够帮你解决php – 如何检查jpeg是否适合内存?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。