PHP高效获取远程图片尺寸和大小(转)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
/**
* 获取远程图片的宽高和体积大小
*
* @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 '<pre>' ;
$result = myGetImageSize( 'http://s6.mogujie.cn/b7/bao/120630/2kpa6_kqywusdel5bfqrlwgfjeg5sckzsew_345x483.jpg_225x999.jpg' , 'curl' );
print_r( $result );
echo '<hr />' ;
$result = myGetImageSize( 'http://s5.mogujie.cn/b7/bao/120629/6d3or_kqytasdel5bgevsugfjeg5sckzsew_801x1193.jpg' , 'fread' );
print_r( $result );
echo '<hr />' ;
$result = myGetImageSize( 'http://hiphotos.baidu.com/zhengmingjiang/pic/item/1c5f338c6d22d797503d92f9.jpg' , 'fread' , true);
print_r( $result );
echo '<hr />' ;
$result = myGetImageSize( 'http://www.vegandocumentary.com/wp-content/uploads/2009/01/imveganlogotransparentbackground.png' , 'curl' , true);
print_r( $result );
echo '<hr />' ;
$result = myGetImageSize( 'http://jiaoyou.ai9475.com/front/templates/jiaoyou/styles/default/image/ad_pic_1.gif' , 'fread' );
print_r( $result );
|
转载于:https://www.cnblogs.com/xingmeng/p/3406688.html
PHP高效获取远程图片尺寸和大小(转)相关推荐
- php 获取远程图片尺寸,PHP高效获取远程图片尺寸和大小的实现方法
原标题:PHP高效获取远程图片尺寸和大小的实现方法 PHP高效获取远程图片尺寸和大小的实现方法 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大 ...
- PHP高效获取远程图片尺寸和大小
/*** 获取远程图片的宽高和体积大小** @param string $url 远程图片的链接* @param string $type 获取远程图片资源的方式, 默认为 curl 可选 fread ...
- php获取网络图片的大小,PHP获取远程图片尺寸和大小实例演示
这篇文章主要为大家详细介绍了PHP获取远程图片尺寸和大小实例演示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴. PHP功能强大,今天361源码给大家介绍的是: ...
- php 获取远程图片长宽和大小
/***获取远程图片的宽高和体积大小 ** @param string $url 远程图片的链接 * @param string $type 获取远程图片资源的方式, 默认为 curl 可选 frea ...
- java获取远程图片并在图片上写文字
本编文章主要是分享一下,从远程获取图片文件,用java在图片上写文字并合成图片的示例.一下代码完全拷贝后是可以正常运行的. 主要有三个类: DrawPicFromUrlToOSS:核心类,获取图片并在 ...
- php获取远程图片模拟post,file上传到指定服务器
1.获取远程图片 /** $path保存图片的地址 $url要获取的远程图片地址 **/ function getimg($path,$url){ $aext = explode('.', $url) ...
- ios 改变图片尺寸_iOS基础(十八)——调整图片尺寸和大小
调整图片尺寸和大小 /** * 调整图片尺寸和大小 * * @param sourceImage 原始图片 * @param maxImageSize 新图片最大尺寸 * @param maxSize ...
- iOS 调整图片尺寸和大小的两个方法
在开发过程中,我们经常会遇到图片压缩功能,下面是我写的图片压缩的两个方法 首先是第一种,也是我比较推荐的 /// 调整图片尺寸和大小 /// @param sourceImage 原始图片 /// @ ...
- 使用Python调整图片尺寸(大小)
凯哥英语视频 使用Python调整图片尺寸(大小) python有一个图像处理库--PIL,可以处理图像文件.PIL提供了功能丰富的方法,比如格式转换.旋转.裁剪.改变尺寸.像素处理.图片合并等等等等 ...
最新文章
- nginx 安装与配置
- Android--WebView
- Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令]
- ExecuteScalar
- lcd图片转二进制工具_辽宁2.8寸LCD屏价格,测距仪LCD显示屏_思迈微
- 互联网晚报 | 9月30日 星期四 | 五菱与B站跨界合作;支付宝向“云闪付”开放支付场景;平安健康险上线“药划算”...
- 去大厂也就图一乐,真人上人还得是外包
- Xshell远程连接CentOS-7版的Linux
- linux下source filename,./filename,. filename,......
- 内存、磁盘硬盘、软盘、光盘、磁盘驱动器的介绍
- uint8_t范围_uint8_t / uint16_t / uint32_t /uint64_t 是什么数据类型 - 大总结,看完全明白了...
- JWT © pepsi-wyl
- IFS Applications架构
- 水银开关式碰撞传感器
- 什么是FormData对象?FormData对象的作用
- bootstrap 表格 ajax,bootstrap-table实现ajax分页
- 去掉迅雷新闻和资源信息的方法
- html圆圈按钮怎么写,HTML button 标签
- mysql、表操作、数据的增删改查
- Javabase到easyui的知识总结