<?php /** * 获取图片尺寸工具类 * @author Robot * * @example * $result = ImageTools::getSize ( * array('url'=>'https://www.baidu.com/img/bdlogo.png') * ); * print_r ( $result ); * */ class ImageTools { /** * 获取远程图片的宽高和体积大小 * * @param string $url * 远程图片的链接 * @param string $type * 获取远程图片资源的方式, 默认为 curl 可选 fread * @param boolean $withsize * 是否获取远程图片的体积大小, 默认false不获取, 设置为 true 时 $type 将强制为 fread * @return false array */ public static function getSize($paramArr) { $options = array( 'url' => false, #远程图片连接 'type' => 'curl', #获取远程图片资源方式,默认为Curl,需要同时获取图片尺寸使用fread 'withsize' => false, #是否获取远程图片的体积大小, 默认false不获取, 设置为 true 时 $type 将强制为 fread 'failTry' => true #请求失败重试,有可能网络问题,第一次请求可能有失败 ); if (is_array($paramArr))$options = array_merge($options, $paramArr); extract($options); // 若需要获取图片体积大小则默认使用 fread 方式 $type = $type === 'fread'?'fread':'curl'; $type = $withsize ? 'fread' : $type; if ($type == 'fread') { $handle = fopen ( $url, 'rb' ); // 或者使用 socket 二进制方式读取, 需要获取图片体积大小最好使用此方法 if (! $handle) return false; $dataBlock = fread ( $handle, 168 ); // 只取头部固定长度168字节数据 } else { $ch = curl_init ( $url ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 3 ); // 超时时间 curl_setopt ( $ch, CURLOPT_RANGE, '0-167' ); // 取前面 168 个字符 curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 ); // 跟踪301跳转 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 ) && $failTry) { $size = getimagesize($url);//某些图片损坏无法获取,直接使用远程连接获取一次,保证获取到正确size } if (empty ( $size )) return false; $result ['width'] = $size [0]; $result ['height'] = $size [1]; // 是否获取图片体积大小 if ($withsize) { // 获取文件数据流信息 $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; } }
相关推荐
本文实例讲述了php实现高效获取图片尺寸的方法。分享给大家供大家参考。具体分析如下: php 获取图片尺寸的方法我们可以使用 getimagesize 获取图片尺寸,但是效率是很低的,首先需要获取整个的图片信息,然后再进行...
php 获取图片信息,包括相机信息,拍摄位置,坐标,曝光度,比较分析信息,焦距,闪光灯等
主要介绍了 PHP高效获取远程图片尺寸和大小的实现方法的相关资料,希望通过本文大家能够实现这样的功能,需要的朋友可以参考下
分享一个将图片保存为不同尺寸的PHP类,处理上传文件,获取错误代码,获取文件扩展名,获取图像信息,处理图片。
*函数:调整图片尺寸或生成缩略图 *修改:2013-2-15 *返回:True/False *参数: * $Image 需要调整的图片(含路径) * $Dw=450 调整时最大宽度;缩略图时的绝对宽度 * $Dh=450 调整时最大高度;缩略图时的绝对高度 * $Type=1...
本文实例讲述了getimagesize获取图片尺寸的方法。分享给大家供大家参考。具体如下: php有现成的函数getimagesize用于获取图像的尺寸,代码示例: 复制代码 代码如下:<?php /* 1.jpg为你想获得其尺寸的图片 */ $...
本文实例讲述了php获取图片信息的方法。分享给大家供大家参考,具体如下: getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回...
主要介绍了php利用curl获取远程图片实现方法,curl要求php环境支持,需要的朋友可以参考下
一个将图片保存为不同尺寸的PHP类,处理上传文件,获取错误代码,获取文件扩展名,获取图像信息,处理图片。
主要介绍了php中使用getimagesize获取图片、flash等文件的尺寸信息实例,需要的朋友可以参考下
php通过fsockopen方法获取头信息,如果请求的是图片,这里的Content-Length就表示图片的大小
拖动鼠标截取选区,被选区域高亮显示,截取后将自动获取文件大小、文件类型、图像尺寸、图片宽度、图片高度,然后单击“上传图片”按钮,上传后可看到上传前和上传后的图片对比。 PHP jQuery html5头像图片选取上传...
之后使用jcrop对该图片进行在线裁剪,获取裁剪坐标及尺寸后,将缩放后的图片,裁剪坐标和宽高等通过post传到PHP页面,在PHP页面对图片进行最后的裁剪。本例主要的js写在了script.js中,该文件中我写了详细的注释,很...
php /** * Images类是一个图片处理类 * @package application.controllers * @since 1.0 */class Images { /** * 缩放图片 * @param $source原图片 * @param $newfile新图片 * @param $pre缩放比例 */ ...
实例095 应用JavaScript实现指定尺寸的无边框窗口 142 实例096 应用CSS+DIV实现无边框窗口 143 实例097 通过双击鼠标实现页面自动滚屏 145 3.10 其他 146 实例098 设置主页 147 实例099 收藏本站 147 ...
本文介绍了关于PHP解决图片无损压缩的问题,分享给大家,... //获取原图尺寸 //缩放尺寸 $newwidth = $width * $percent; $newheight = $height * $percent; $src_im = imagecreatefromjpeg($file); $dst_im = image