首页 > 编程技术 > php

php getimagesize函数获取图片宽高

发布时间:2016-11-25 16:47

如果你想使用php获取图片的高与宽我们可以直接利用php中的getimagesize函数来操作,下面我来给大家详细介绍getimagesize函数使用方法。

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。

 代码如下 复制代码

<?php/* 1.jpg为你想获得其尺寸的图片 */
$arr = getimagesize("1.jpg");

/**
 * 这里$arr为一个数组类型
 * $arr[0] 为图像的宽度
 * $arr[1] 为图像的高度
 * $arr[2] 为图像的格式,包括jpg、gif和png等
 * $arr[3] 为图像的宽度和高度,内容为 width="xxx" height="yyy"
 */

/* 以下两行代码输出的内容都是一样的 */
echo "<img" width=100% src="1.jpg" $arr[3] alt="" />";
echo "<img" width=100% src="1.jpg" width="$arr[0]" height="$arr[1]" alt="" />";
?>

以上php代码被解释为内容为:

 代码如下 复制代码


<img" width=100% src="1.jpg" width="xxx" height="yyy" alt="" />
<img" width=100% src="1.jpg" width="xxx" height="yyy" alt="" />

Example #1 getimagesize(文件)

 代码如下 复制代码

<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img" width=100% src="img/flag.jpg" $attr>";
?>

本文章来给大家介绍PHP常用字符串正则替换及剖分函数比较,在php字符串正则替换大概有:str_replace、str_ireplace、substr_replace、preg_replace、preg_match、preg_match_all、preg_quote、preg_split、ereg_replace、eregi_replace、preg_replace、str_split函数,下面我来给大家介绍。

正则函数关系暧昧所以都放到一起比较一下,方便参考。

名称 支持正则 特点 备注
str_replace X 字符串替换函数,大小写敏感  
str_ireplace X 字符串替换函数,大小写不敏感,支持数组式批量替换 感谢网友franci,提醒添加
substr_replace X 部分替换字符串函数,可以指定位置index  
       
preg_replace Y 指定匹配模式进行替换,支持子串引用  优先使用
ereg_replace Y 指定匹配模式进行替换,大小写敏感,支持子串引用  
eregi_replace Y 指定匹配模式进行替换,大小写不敏感,支持子串引用  
       
ereg Y 指定模式全文匹配,可以用来匹配判断,或返回匹配数组  
preg_match Y 指定模式匹配一次退出,可以用来是否匹配判断,或使用返回的匹配数组  优先使用
preg_match_all Y 指定模式全文匹配,一般用来使用返回的匹配数组  优先使用
       
preg_split Y 指定匹配模式下正则剖分,如果能用最好还是使用explode或str_split  
str_split X 指定长度剖分字符串,默认单个字符剖分成数组  
explode X 可以指定单个或多个字符剖分字符串,成功则返回数组,例如12345按照34剖分则返回12和5  
       
 preg_quote  -  转义正则表达式字符,意思就是为特殊字符加上反斜线,正则表达式的特殊字符包括:. + * ? [ ^ ] $ ( ) { } = ! < > | : -  
       

补充说明:

1、在PHP中有两套正则表达式函数库,功能非常相似:

一套是POSIX(Portable Operating System Interface of Unix )库提供的,函数以ereg_前缀命名,POSIX正则函数库目前已经不再推荐使用

一套是PCRE(Perl Compatible Regular Expression)库提供的,函数以preg_前缀命名,推荐大家优先使用。在PCRE中,通常将模式表达式(即正则表达式)包含在两个反斜线“/”之间,如“/^w+$/”样式。

2、PHP正则表达式作用:匹配提取、匹配替换。

在php中提供了大量的对文件操作的函数,下面我来给大家总结php 文件函数对文件读入,写入操作,有需了解的这些函数的朋友可进入参考。

一、操作文件,获取文件信息

 代码如下 复制代码


<?php

    //打开文件
    $file_path="text.txt";
    if($fp=fopen($file_path,"r")){
        //取出文件的信息
        $file_info=fstat($fp);
        echo "<pre>";
        print_r($file_info);
        echo "</pre>";

        //单个的取出
        $file_size=$file_info['size'];
        //文件大小按字节来计算的
        echo "文件的大小为:".$file_size;
        echo  "<br/>文件上次访问的时间:".date("Y-m-d H:i:s",$file_info['atime']);  //atime表示【该文件上次被访问的时间】
        echo  "<br/>文件上次修改的时间:".date("Y-m-d H:i:s",$file_info['mtime']);  //mtime表示【该文件上次内容被修改的时间】
        echo  "<br/>文件上次change的时间:".date("Y-m-d H:i:s",$file_info['ctime']); //ctime表示【该文件上次 文件所有者/文件组 修改的时间】

    }else{
        echo "打开文件失败";
    }
   
    //关闭文件,这个非常重要
    fclose($fp);
?>

2、第二种获取文件信息方式

 代码如下 复制代码


<?php

    //第二种获取文件信息
    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }

    echo "<br>".date("Y-m-d H:i:s",fileatime($file_path));
    echo "<br>".date("Y-m-d H:i:s",filemtime($file_path));
    echo "<br>".date("Y-m-d H:i:s",filectime($file_path));

    //echo "<br>".filemtime($file_path);
    //echo "<br>".filectime($file_path);
?>

二、读取文件操作

 代码如下 复制代码

<?php

    //读取文件
    $file_path="text.txt";

    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
   
    //打开文件
    $fp=fopen($file_path,"a+");
    //读取文件
    $content=fread($fp,filesize($file_path));
    echo "文件内容是:<br/>";
    //默认情况下把内容输出到网页后,不会换行显示,因为网页不识别rn
    //所有要把rn =><br/>
   
    $content=str_replace("rn","<br/>",$content);
    echo  $content;

    fclose($fp);
?>


 

2、第二种读取文件的方式

 代码如下 复制代码


<?php


    //第二种读取文件的方式

    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
    $content=file_get_contents($file_path);

    $content=str_replace("rn","<br/>",$content);
    echo  $content;
?>


 

3、第三种读取方法,循环读取(对付大文件)

 代码如下 复制代码


<?php


    //第三种读取方法,循环读取(对付大文件)

    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }

    //打开文件
    $fp=fopen($file_path,"a+");
    //定义每次读取的多少字节
    $buffer=1024;
    //一边读取。一边判断是否达到文件末尾
    while(!feof($fp)){
        //按1024个字节读取数据
        $content=fread($fp,$buffer);
        echo $content;
    }

    fclose($fp);
?>


 

4、文件读取实际应用:当我们连接数据库的时候,可以把指定的数据配置到一个文件中,然后再PHP运行时,实时获取信息

 代码如下 复制代码

db.ini 文件

host=127.0.0.1
user=root
pwd=root
db=test


获取文件

 代码如下 复制代码


<?php

    $arr=parse_ini_file("db.ini");
    echo "<pre>";
    print_r($arr);
    echo "</pre>";
   
    echo $arr['host'];

    //连接数据库
    $conn = mysql_connect($arr['host'], $arr['user'], $arr['pwd']);

    if(!$conn){
        echo "error";
    }

    echo "OK";
?>

三、写文件

 代码如下 复制代码

<?php

    //写文件
    $file_path="text.txt";
    if(!file_exists($file_path)){
        echo "文件不存在";
        exit();
    }
    //"a+" 在文件后面追加  "w+"重新写入

    $fp=fopen($file_path,"w+");
    $con="rn你好";
    for($i=0;$i<10;$i++){
    fwrite($fp,$con);}

    echo "添加成功";
    fclose($fp);

   
?>

2、第二中方式  通过file_put_contents函数

 代码如下 复制代码


<?php


    //第二种方式写文件
    $file_path="text.txt";
    $content="hello,worldrn";

    //将一个字符串写入文件  默认是【FILE_USE_INCLUDE_PATH 】"w+"重新写入
    file_put_contents($file_path,$content,FILE_APPEND);

    echo "OK";
?>

在php中判断是否为数组很简单,php中利用is_array() 函数就可以快速判断变量是否为数组了,下面我来给大家介绍。

is_array — 检测变量是否是数组

Report a bug 描述
bool is_array ( mixed $var )

如果 var 是 array,则返回 TRUE,否则返回 FALSE。

 代码如下 复制代码

$a =1;

if( is_array( $a ) )
{
  echo '是数组';
}
else
{
   echo '不是数组0';
}

 代码如下 复制代码

<?php
function is_vector( &$array ) {
   if ( !is_array($array) || empty($array) ) {
      return -1;
   }
   $next = 0;
   foreach ( $array as $k => $v ) {
      if ( $k !== $next ) return false;
      $next++;
   }
   return true;
}
?>

判断是否索引数组的方法

echo is_assoc($array)?'索引数组':'不是索引数组';

 代码如下 复制代码

function is_assoc($array) {
        if(is_array($array)) {
            $keys = array_keys($array);
            return $keys != array_keys($keys);
        }
        return false;
}

昨天我有一个功能是需要判断生成的多个数组交集,也就是要判断这些数组中是否存在交集了,下面我来给各位同学介绍php数组交集判断程序代码实例,有需要的朋友可参考。

需要判断两个数组是否有交集,第一个感觉PHP中应该有这个函数,果然:

array array_intersect(array array1,array array2[,arrayN…])

返回N个数组中的交集元素,如果是关联数组可以用array_intersect_assoc()

PHP案例如下:

数组的交集 array_intersect()
array_intersect()函数返回一个保留了键的数组,这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。其形式如下:

 代码如下 复制代码


<?php
$fruit1 = array("Apple","Banana","Orange");
$fruit2 = array("Pear","Apple","Grape");
$fruit3 = array("Watermelon","Orange","Apple");
$intersection = array_intersect($fruit1, $fruit2, $fruit3);
print_r($intersection);
// 输出 Array ( [0] => Apple )
?>

我的应用如下:

 代码如下 复制代码

if($user->role != 1){
            $count = count($projects);
            for($i=0;$i<$count;$i++){
                if(!array_intersect(explode(',', $projects[$i]['role']),  explode(',', $projects[$i]['next_approve_role']))){
                    unset($projects[$i]);
                    continue;
                }
            }
 }

关联数组的交集 array_intersect_assoc()

 代码如下 复制代码

<?php
$fruit1 = array("red"=>"Apple","yellow"=>"Banana","orange"=>"Orange");
$fruit2 = array("yellow"=>"Pear","red"=>"Apple","purple"=>"Grape");
$fruit3 = array("green"=>"Watermelon","orange"=>"Orange","red"=>"Apple");
$intersection = array_intersect_assoc($fruit1, $fruit2, $fruit3);
print_r($intersection);

// output
// Array ( [red] => Apple )
?>

数组交集的优化

假定每个参数会包含一千个左右的产品ID(int),以此为前提来模拟生成一些数据:

 代码如下 复制代码

<?php

$rand = function() {
    $result = array();

    for ($i = 0; $i < 1000; $i++) {
        $result[] = mt_rand(1, 10000);
    }

    return $result;
};

$param_a = $rand();
$param_b = $rand();

?>

注意:如果测试数据集过小的话,结论可能会出现不一致。

先看看通过PHP内置方法array_intersect实现的性能:

 代码如下 复制代码

<?php

$time = microtime(true);

$result = array_intersect($param_a, $param_b);

$time = microtime(true) - $time;

echo "array_intersect: {$time}n";

?>

在优化之前,我们先来看看array_intersect一些特殊的地方:

 代码如下 复制代码

<?php

$param_a = array(1, 2, 2);
$param_b = array(1, 2, 3);

var_dump(
    array_intersect($param_a, $param_b),
    array_intersect($param_b, $param_a)
);

?>

array_intersect($param_a, $param_b): 1, 2, 2
array_intersect($param_b, $param_a): 1, 2
也就是说,如果在第一个数组参数中有重复元素的话,则array_intersect会返回所有满足条件的重复元素。改写array_intersect的时候最好兼容这些功能。

下面看看通过自定义方法int_array_intersect实现的性能:

 代码如下 复制代码

<?php

function int_array_intersect()
{
    if (func_num_args() < 2) {
        trigger_error('param error', E_USER_ERROR);
    }

    $args = func_get_args();

    foreach ($args AS $arg) {
        if (!is_array($arg)) {
            trigger_error('param error', E_USER_ERROR);
        }
    }

    $intersect = function($a, $b) {
        $result = array();

        $length_a = count($a);
        $length_b = count($b);

        for ($i = 0, $j = 0; $i < $length_a && $j < $length_b; null) {
            if($a[$i] < $b[$j] && ++$i) {
                continue;
            }

            if($a[$i] > $b[$j] && ++$j) {
                continue;
            }

            $result[] = $a[$i];

            if (isset($a[$next = $i + 1]) && $a[$next] != $a[$i]) {
                ++$j;
            }
            ++$i;
        }

        return $result;
    };

    $result = array_shift($args);
    sort($result);

    foreach ($args as $arg) {
        sort($arg);
        $result = $intersect($result, $arg);
    }

    return $result;
}

$time = microtime(true);

$result = int_array_intersect($param_a, $param_b);

$time = microtime(true) - $time;

echo "int_array_intersect: {$time}n";

?>

直觉上,我们肯定会认为内置函数快于自定义函数,但本例中结果恰恰相反:

array_intersect: 0.023918151855469
int_array_intersect: 0.0026049613952637

标签:[!--infotagslink--]

您可能感兴趣的文章: