php高效快速获取图片尺寸的方法

 更新时间:2016年11月25日 17:23  点击:2327
在 php 获取图片尺寸的方法我们可以使用 getimagesize 获取图片尺寸的效率是很低的,首先需要获取整个的图片信息,然后再进行操作,下面的例子更科学算法更好,我们一起来看看吧。

下方法可以用于快速获取图片尺寸信息

1.获取JPEG格式图片的尺寸信息

 代码如下 复制代码

<?php
/*

* 获取JPEG格式图片的尺寸信息,并且不需要下载/读取整个图片。

* 经测试这个函数不是对所有JPEG格式的图片都有效。

* http://www.111cn.net

*/

// Retrieve JPEG width and height without downloading/reading entire image.

function getjpegsize($img_loc) {
    $handle = fopen($img_loc, "rb") or die("Invalid file stream.");
    $new_block = NULL;
    if(!feof($handle)) {
        $new_block = fread($handle, 32);
        $i = 0;
        if($new_block[$i]=="xFF" && $new_block[$i+1]=="xD8" && $new_block[$i+2]=="xFF" && $new_block[$i+3]=="xE0") {
            $i += 4;
            if($new_block[$i+2]=="x4A" && $new_block[$i+3]=="x46" && $new_block[$i+4]=="x49" && $new_block[$i+5]=="x46" && $new_block[$i+6]=="x00") {
                
// Read block size and skip ahead to begin cycling through blocks in search of SOF marker

                $block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]);
                $block_size = hexdec($block_size[1]);
                while(!feof($handle)) {
                    $i += $block_size;
                    $new_block .= fread($handle, $block_size);
                    if($new_block[$i]=="xFF") {
                        
// New block detected, check for SOF marker

                        $sof_marker = array("xC0", "xC1", "xC2", "xC3", "xC5", "xC6", "xC7", "xC8", "xC9", "xCA", "xCB", "xCD", "xCE", "xCF");
                        if(in_array($new_block[$i+1], $sof_marker)) {
                            
// SOF marker detected. Width and height information is contained in bytes 4-7 after this byte.

                            $size_data = $new_block[$i+2] . $new_block[$i+3] . $new_block[$i+4] . $new_block[$i+5] . $new_block[$i+6] . $new_block[$i+7] . $new_block[$i+8];
                            $unpacked = unpack("H*", $size_data);
                            $unpacked = $unpacked[1];
                            $height = hexdec($unpacked[6] . $unpacked[7] . $unpacked[8] . $unpacked[9]);
                            $width = hexdec($unpacked[10] . $unpacked[11] . $unpacked[12] . $unpacked[13]);
                            return array($width, $height);
                        } else {
                            
// Skip block marker and read block size

                            $i += 2;
                            $block_size = unpack("H*", $new_block[$i] . $new_block[$i+1]);
                            $block_size = hexdec($block_size[1]);
                        }
                    } else {
                        return FALSE;
                    }
                }
            }
        }
    }
    return FALSE;
}
?>

2.

 代码如下 复制代码

$url='http://www.111cn.net /images/201203/08/1331189004_28093400.jpg';
$image_content = file_get_contents($url);
$image = imagecreatefromstring($image_content);
$width = imagesx($image);
$height = imagesy($image);
echo $width.'*'.$height."nr";   

最近看到博客留言的头像有点别扭,因为游客的头像都是同一个头像,看着不是很舒服。虽然现在绝大多数的主题集成了Gavatar头像功能,先不说gavatar被墙的问题,我自己现在都没弄个gavatar头像。

因为我登陆了几次,连接速度巨慢,所以我就放弃了。当然留言插件也不胜枚举,比如现在比较火的多说,但对于没有注册多说的朋友,头像仍是个问题。对于多说的社交账号绑定,我测试多次,QQ,人人这些主流平台的绑定经常出错,而且有的朋友(像我)讨厌繁琐的授权。

鉴于此,我在想一个大众化的,比较简单的方法。我想到的是对于没有头像的朋友调用其QQ头像,因为QQ现在至少是人手一个,所以只需要留言时填写QQ号,然后调用其头像。这样一来就方便多了。

首先是获取QQ的头像了,这也是这个想法的第一步,即今天的主题:

第一种方法:

 代码如下 复制代码

<?php
$qq = 552452006;
echo '<img src="'.'http://q1.qlogo.cn/g?b=qq&nk='.$qq.'&s=100&t='. time() .'">';
?>

第二种方法:

 代码如下 复制代码

<?php
$qq = 552452006;
 
$src = 'http://q1.qlogo.cn/g?b=qq&nk=' . $qq . '&s=100&t=' . time();
 
header('Content-type: image/png');
 
$res = imagecreatefromstring(file_get_contents($src));
 
imagepng($res);
 
imagedestroy($res);
?>

这两种方法的区别:

第一种方法的优点是可以输出头像的原图,如果你的头像是动态的gif,那么输出的也是动态图。缺点是速度比较慢,不适合作为调用头像的方法。

第二种方法的优点是相比第一种速度比较快,但只抓取头像的静态图,不会显示动态头像,比较适合作为调用头像的方法。

在php中要实现用户登录我们一般都会到curl模拟登陆功能,下面我就基于php的curl来实现登录人人网哦,完整的例子希望对各位有帮助。

 代码如下 复制代码

<?php
$cookie_file = dirname(__FILE__)."/renren.cookie";

$login_url = 'http://passport.renren.com/PLogin.do';

$post_fields['email'] = '';//人人的帐号
$post_fields['password'] = '';//人人密码
$post_fields['origURL'] = 'http%3A%2F%2Fhome.renren.com%2FHome.do';
$post_fields['domain'] = 'renren.com';


$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
$content = curl_exec($ch);
curl_close($ch);
//匹配用户的ID
$send_url='http://www.renren.com/home';
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
//获取用户id
$tmp = explode('/',$info['redirect_url']);
$uid = array_pop($tmp);
unset($tmp);

//$uid = "305115027";
//获取token和rtk

$send_url='http://www.renren.com/'.$uid;
$ch = curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$tmp = curl_exec($ch);
curl_close($ch);
preg_match_all("/get_check:'(.*?)',get_check_x:'(.*?)',/is",$tmp,$arr);
$token = $arr[1][0];//1121558104
$rtk = $arr[2][0];//e9a9cb2

//发布信息
$poststr['content'] = "这就是一个测试而已!!!";
$poststr['withInfo'] = '{"wpath":[]}';
$poststr['hostid:'] = $uid;
$poststr['privacyParams'] = '{"sourceControl": 99}';
$poststr['requestToken'] = $token;
$poststr['_rtk'] = $rtk;
$poststr['channel'] = "renren";

$head = array(
   'Referer:http://shell.renren.com/ajaxproxy.htm',
   'X-Requested-With:XMLHttpRequest',
  );
$ch = curl_init("http://shell.renren.com/{$uid}/status");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
curl_setopt($ch,CURLOPT_HTTPHEADER,$head);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$content = curl_exec($ch);
curl_close($ch);
$data = json_decode($content,true);
if($data["code"] == "0"){
 echo "发布成功!";
}else{
 echo "shit !!!";
}

原文来自:http://www.mapenggang.com/

重复提交数据我们在应用中经常会碰到了,今天我给各位介绍利用session来防止用户不小心重复提交数据的一个例子


原理非常的简单:就是用session在表单页面记录下,然后提交页面判断,如果相等则视为成功,并清空session

例子

 代码如下 复制代码

<?php
//开启session
session_start();

//如果有提交标识
if(isset($_GET['action']) && $_GET['action'] === 'save'){

 //如果有session且跟传过来的值一样 www.111cn.net 才算提交
 if(isset($_SESSION['__open_auth']) && isset($_POST['auth']) && $_SESSION['__open_auth'] == $_POST['auth']){
  print_r($_POST);
  $_SESSION['__open_auth'] = null;//清空
 } else {

  //走起
  header("location: post.php");
 }
 exit();
}

//授权
$auth = $_SESSION['__open_auth'] = time();

?>
<!doctype html>
<html>
<head>
 <meta charset="UTF-8">
 <title>post</title>
</head>
<body>
 <form action="post.php?action=save" method="post">
  <ul>
   <li>
    <input type="hidden" name="auth" value="1395454119">
    <input type="text" name="userName">
   </li>
   <li>
    <input type="password" name="userpass">
   </li>
   <li>
    <input type="submit" value="走起">
   </li>
   <li>
    1395454119   </li>
  </ul>
 </form>
</body>
</html>

当然还有更多更好的办法在这就不介绍了,文章最下面你感兴趣的文章中有很多相关文章。

在支付宝处理业务中return_url,notify_url是返回些什么状态呢,我们要根据它来做一些处理就必须了解return_url,notify_url的区别,下面我就来给各位介绍介绍。


问题描述:
我在处理支付宝业务中出现过这样的问题,付费完成后,在支付宝跳转到商家指定页面时,订单状态已经更新,通过调试发现是支付宝先通知notify_url,完成了订单状态。
支付宝return_url和notify_url通知顺序问题:
顺序不一定的,请别以先后顺序来做判断。具体如何判断,是根据您当前数据库里的状态和刚从支付宝里获取到的状态做对比来判断是否有做过处理了。
关于支付宝return_url和notify_url的区别:

同步通知页面特性(return_url特性):

(1)   买家在支付成功后会看到一个支付宝提示交易成功的页面,该页面会停留几秒,然后会自动跳转回商户指定的同步通知页面(参数return_url);

(2)   该页面中获得参数的方式,需要使用GET方式获取,如request.QueryString("out_trade_no")、$_GET['out_trade_no'];

(3)   该方式仅仅在买家付款完成以后进行自动跳转,因此只会进行一次;

(4)   该方式不是支付宝主动去调用商户页面,而是支付宝的程序利用页面自动跳转的函数,使用户的当前页面自动跳转;

(5)   基于(4)的原因,可在本机而不是只能在服务器上进行调试;

(6)   返回URL只有一分钟的有效期,超过一分钟该链接地址会失效,验证则会失败;

(7)   设置页面跳转同步通知页面(return_url)的路径时,不要在页面文件的后面再加上自定义参数。例如:

错误的写法:<http://www.alipay.com/alipay/return_url.php?xx=11>

正确的写法:<http://www.alipay.com/alipay/return_url.php>

 

服务器异步通知页面特性(notify_url特性):

(1)   必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;

(2)   支付宝是用POST方式发送通知信息,因此该页面中获取参数的方式,如:

request.Form("out_trade_no")、$_POST['out_trade_no']。

(3)   支付宝主动发起通知,该方式才会被启用;

(4)   只有在支付宝的交易管理中存在该笔交易,且发生了交易状态的改变,支付宝才会通过该方式发起服务器通知(即时到账中交易状态为“等待买家付款”的状态默认是不会发送通知的);

(5)   服务器间的交互,不像页面跳转同步通知可以在页面上显示出来,这种交互方式是不可见的;

(6)   第一次交易状态改变(即时到账中此时交易状态是交易完成)时,不仅页面跳转同步通知页面会启用,而且服务器异步通知页面也会收到支付宝发来的处理结果通知;

(7)   程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。

一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:2m,10m,10m,1h,2h,6h,15h);

(8)   程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到success字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知;

(9)   cookies、session等在此页面会失效,即无法获取这些数据;

(10)   该方式的调试与运行必须在服务器上,即互联网上能访问;

(11)   该方式的作用主要防止订单丢失,即页面跳转同步通知没有处理订单更新,它则去处理;

(12)   通知ID(参数notify_id)只有一分钟有效期,超过一分钟该次通知会验证失败。一旦验证成功下次再验证就会失效。

[!--infotagslink--]

相关文章

  • php高效快速获取图片尺寸的方法

    在 php 获取图片尺寸的方法我们可以使用 getimagesize 获取图片尺寸的效率是很低的,首先需要获取整个的图片信息,然后再进行操作,下面的例子更科学算法更好,我们一起来看...2016-11-25
  • PHP 更高效的字符长度判断例子

    在php中测试字符串长度的函数是strlen,但今天我发现使用isset更加的更高效哦,口说不你不相信下面我举两个例子来给各位看看。 学PHP的都了解,在PHP中获取字符串有一...2016-11-25
  • C#如何在海量数据下的高效读取写入MySQL

    这篇文章主要介绍了C#如何在海量数据下的高效读取写入MySQL的相关资料,需要的朋友可以参考下...2017-01-09
  • android获取图片尺寸的两种方式及bitmap的缩放操作

    这篇文章主要介绍了android获取图片尺寸的两种方式及bitmap的缩放操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-28
  • iOS 如何高效的使用多线程

    这篇文章主要介绍了iOS 如何高效使用的多线程,帮助大家提高ios 开发的效率,感兴趣的朋友可以了解下...2020-12-08
  • 美图看看批量修改图片尺寸方法分享

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说一下批量修改图片尺寸的方法,各位想知道具体处理方法的使用者们,那么下面就快来跟着小编一起看一看教程吧。 ...2016-09-14
  • 手机网站自动适合不同尺寸的手机

    手机网站自动适合不同尺寸的手机我们需要注意一些什么事项呢,其实这个主要是几个点了,今天我们一起来看看吧。 随着3G的普及,越来越多的人使用手机上网。 手机的屏...2016-10-10
  • 手机网站不同尺寸设置字体的样式的方法

    在手机开发中我们有一些字体操作了,今天我们来看一篇关于手机网站不同尺寸设置字体的样式的方法,希望文章能够帮助到大家。 板式一: @media screen and (min-width:3...2016-10-10
  • php优化及高效提速问题小结

    一、 在函数中,传递数组时使用 return 比使用 global 要高效,比如: function userloginfo($usertemp){ $detail=explode("|",$usertemp); return $detail; } $log...2016-11-25
  • getimagesize获取图片尺寸php函数

    php有现成的函数getimagesize用于获取图像的尺寸,具体的函数使用方法以及代码示例 <?php教程/* 1.jpg为你想获得其尺寸的图片 */ $arr = getimagesize("1.jpg");...2016-11-25
  • pytorch 改变tensor尺寸的实现

    今天小编就为大家分享一篇pytorch 改变tensor尺寸的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-30
  • SQL Server 2005: 利用新的ranking函数实现高效的数据分页操作

    最近MSDN Magazine上的一篇文章10 Tips for Writing High-Performance Web Applications提到了有效的数据分页技术对提高ASP .NET程序性能的重要性;并给出了一个实...2016-11-25
  • 用js按比例重定图片尺寸

    js 图片比例 js 按比例缩小图片 照片尺寸比例 cad尺寸比例 js 图片切换 js 图片 js图片轮换 js图片滚动 js图片特效 图片滚动js代码 问题是一个网友提出来的,想要达到...2016-09-20
  • 基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)

    这篇文章主要介绍了基于jquery实现图片相关操作,包括图片重绘、图片获取尺寸、图片调整大小、图片缩放,感兴趣的小伙伴们可以参考一下...2015-12-27
  • php图片处理类(生成缩略图,图片尺寸调整,图片截取,图片加水印,图片旋转 )

    注意这个类库有一个重名的叫phpThumb,只是大小写的差别,所以查找文档的时候千万注意。 在网站建设过程中,需要处理图片的地方多不胜数,用PHP的图片函数处理图片,十分繁琐。...2016-11-25
  • php如何获取flash的尺寸的详细数据

    有时我们的网站需要获取flash文件的尺寸信息,php有一个内置的函数可以实现,这个函数就是getimagesize,他可以返回图像的尺寸及文件类型的一个数组。 如果你还想着通...2016-11-25
  • php 获取图片尺寸的方法

    在php中获取图片大小我们可以使用getimagesize函数,这个函数是用于获取图像的尺寸的函数,下面我们一起来看例子。 利用getimagesize函数就可以获取 代码如...2016-11-25
  • 提高效率的搜索引擎使用技巧分享

    目前大部分搜索引擎教程都不分大小写,而且,标点符号(包括 @#$%^&*()=+[])以及其他特殊字符)都会被忽略。搜索引擎使用中 要注意:能连不分,拆分有度,偏正结合,由面到点,全面开...2016-10-10
  • php 获取图片尺寸

    <? $arr=getimagesize("images/album_01.gif"); echo $arr[3]; $strarr=explode(""",$arr[3]); echo $strarr[1]; ?> <HTML> <HEAD> <TITLE>演示图片...2016-11-25
  • 11款高端旗舰机同框尺寸对比 看看每一款手机有多大多长

    下面为大家带来11款高端旗舰机同框尺寸对比,这11款旗舰机尺寸不尽相同,从4.7英寸iPhone 7到6.2英寸Galaxy S8+都有,大家可以通过这个看看自己的手机有多大多长...2017-07-06