原标题:PHP高效获取远程图片尺寸和大小的实现方法

PHP高效获取远程图片尺寸和大小的实现方法

在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正。写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长。

实现代码:

/** * 获取远程图片的宽高和体积大小 * * @param string $url 远程图片的链接 * @param string $type 获取远程图片资源的方式, 默认为 curl 可选 fread * @param boolean $isGetFilesize 是否获取远程图片的体积大小, 默认false不获取,

* 设置为 true 时 $type 将强制为 fread * @return false|array */ function myGetImageSize($url, $type = 'curl', $isGetFilesize = false) { // 若需要获取图片体积大小则默认使用 fread 方式 $type = $isGetFilesize ? 'fread' : $type; if ($type == 'fread') { // 或者使用 socket 二进制方式读取, 需要获取图片体积大小最好使用此方法 $handle = fopen($url, 'rb'); if (! $handle) return false; // 只取头部固定长度168字节数据 $dataBlock = fread($handle, 168); } else { // 据说 CURL 能缓存DNS 效率比 socket 高 $ch = curl_init($url); // 超时设置 curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 取前面 168 个字符

// 通过四张测试图读取宽高结果都没有问题,若获取不到数据可适当加大数值 curl_setopt($ch, CURLOPT_RANGE, '0-167'); // 跟踪301跳转 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 返回结果 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $dataBlock = curl_exec($ch); curl_close($ch); if (! $dataBlock) return false; } // 将读取的图片信息转化为图片路径并获取图片信息,经测试,

//这里的转化设置 jpeg 对获取png,gif的信息没有影响,无须分别设置 // 有些图片虽然可以在浏览器查看但实际已被损坏可能无法解析信息 $size = getimagesize('data://image/jpeg;base64,'. base64_encode($dataBlock)); if (empty($size)) { return false; } $result['width'] = $size[0]; $result['height'] = $size[1]; // 是否获取图片体积大小 if ($isGetFilesize) { // 获取文件数据流信息 $meta = stream_get_meta_data($handle); // nginx 的信息保存在 headers 里,apache 则直接在 wrapper_data $dataInfo = isset($meta['wrapper_data']['headers']) ?

$meta['wrapper_data']['headers'] : $meta['wrapper_data']; foreach ($dataInfo as $va) { if ( preg_match('/length/iU', $va)) { $ts = explode(':', $va); $result['size'] = trim(array_pop($ts)); break; } } } if ($type == 'fread') fclose($handle); return $result; } // 测试的图片链接 echo '

'; $result = myGetImageSize('http://s6.mogujie.cn/b7/bao/

120630/2kpa6_kqywusdel5bfqrlwgfjeg5sckzsew_345x483.jpg_225x999.jpg', 'curl'); print_r($result); echo '


'; $result = myGetImageSize('http://s5.mogujie.cn/b7/bao/

120629/6d3or_kqytasdel5bgevsugfjeg5sckzsew_801x1193.jpg', 'fread'); print_r($result); echo '


'; $result = myGetImageSize('http://hiphotos.baidu.com/

zhengmingjiang/pic/item/1c5f338c6d22d797503d92f9.jpg', 'fread', true); print_r($result); echo '


'; $result = myGetImageSize('http://www.vegandocumentary.com/wp-content/

uploads/2009/01/imveganlogotransparentbackground.png', 'curl', true); print_r($result); echo '


'; $result = myGetImageSize('http://jiaoyou.ai9475.com/

front/templates/jiaoyou/styles/default/image/ad_pic_1.gif', 'fread'); print_r($result);

责任编辑:

php 获取远程图片尺寸,PHP高效获取远程图片尺寸和大小的实现方法相关推荐

  1. 优质图片采集九招,快速高效获取!

    在当今的信息时代,图片已经成为人们获取信息和表达情感的重要方式之一.无论是个人还是企业,都需要大量的优质图片来满足自己的需求.那么如何快速高效地获取优质图片呢?本文将从以下九个方面进行详细分析讨论. ...

  2. php 验证网络图片尺寸,通过url获取图片尺寸的几种方法:JS和php

    首先是js的方法,通过new一个Image对象,设置src属性,并监听complete和onload事件,图片加载完成后输出图片的宽度和高度 function checkPicurl(url){ va ...

  3. Python:通过远程监控用户输入来获取淘宝账号和密码的实验(二)

    从今天早上产生了写个获取淘宝账号及密码的想法后,到现在,全天都在看书.调试程序,12小时内写了三篇相关博客,如下: <Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性> ...

  4. jsp显示服务器路径下的图片,jsp 从服务器获取图片路径

    jsp 从服务器获取图片路径 内容精选 换一换 批量获取智能图片下载路径POST /v1/{user_id}/intelligence-data/pictures状态码: 200状态码: 400获取图 ...

  5. 获取服务器上图片的位置,怎么获取服务器上的图片地址

    怎么获取服务器上的图片地址 内容精选 换一换 通过云服务器或者外部镜像文件创建私有镜像时,如果云服务器或镜像文件所在虚拟机的网络配置是静态IP地址时,您需要修改网卡属性为DHCP,以使私有镜像发放的新 ...

  6. 如何获取Flickr图片链接地址作为外链图片

    Flickr,雅虎旗下图片分享网站.为一家提供免费及付费数位照片储存.分享方案之线上服务,也提供网络社群服务的平台.其重要特点就是基于社会网络的人际关系的拓展与内容的组织.这个网站的功能之强大,已超出 ...

  7. php获取服务器上的图片不显示,php 读取服务器图片

    php 读取服务器图片 内容精选 换一换 本文介绍如何将开源框架的网络模型,例如Caffe.TensorFlow等框架训练好的模型,通过OMG(Offline Model Generator:离线模型 ...

  8. 你是如何快捷、高效获取新知识的?

    一次,同学问我"Redhat平台下的服务器叫什么?",答案无疑是"Apach".后来,我想他怎么不会在 Baidu 里搜索一下答案就出来籽?但这可以理解,他不是 ...

  9. C#跑马灯,图片滚动,后台获取图片地址。动态绑定图片,imag显示文字

    下面附下载地址. http://download.csdn.net/download/njxiaogui/10002058 1.跑马灯效果,图片连续循环滚动,图片下面并可附文字描述,图片是从数据库中获 ...

最新文章

  1. Windows server下部署php环境
  2. docker 命令详解
  3. 云原生收购潮:思科计划收购Portshift;Kasten加入Veeam
  4. 洛谷 P1678 烦恼的高考志愿
  5. Windows下Mex程序的调试
  6. 高级数据结构研究-B树系列以及红黑树
  7. 常见的钓鱼招式,可千万别入坑哦
  8. HashSet 和 TreeSet的区别
  9. matlab读int16读文件_MATLAB——文件读写(1)
  10. 使用Angular的http client发送请求,请求response总是被当成json类型处理
  11. 解压大于4g的文件_python解压压缩包
  12. 7天期限已过,谷歌披露已遭利用的 Windows 内核 0day 详情
  13. [独孤九剑]持续集成实践(二)– MSBuild语法入门
  14. Sun JVM 内存管理、参数与调优、内存分配与回收策略、GC 日志配置使用详解
  15. 分层模式下的Lazy Load ——探索Domain Model系列(下)--转
  16. centos php solr 安装,centos下安装配置solr全纪录
  17. 如何修改SAO用户密码
  18. linux数据向量化指令,VLIW DSP编译器向量化优化技术及指令分簇算法研究
  19. 平淡中,一直追梦的人 ----访济南市城市规划设计院副总工程师田洁
  20. python 冒号分隔_以冒号分隔的分析

热门文章

  1. adc0809工作过程C语言,ADC0809的工作原理
  2. 社交网络群体精准识别定位
  3. 周岁虚岁计算html源码,在excel中如何计算周岁.虚岁以及实际年龄?
  4. python中的df是什么意思_python – 了解scikit CountVectorizer中的min_df和max_df
  5. 2023最新版网络安全图成长路线图,从零基础到精通
  6. 星冰乐java chips_揭秘 | 星巴克内部员工推荐隐藏菜单
  7. laravel8实现图片验证码
  8. docker-compose.yml 配置文件详解
  9. 《纪念碑谷》是如何欺骗人们的视觉的?
  10. IT项目管理课后作业