• php 图片剪切


     1 <?php
     2 
     3 /**
     4  * 图像裁剪
     5  * @param $source_path 原图路径
     6  * @param $target_width 需要裁剪的宽
     7  * @param $target_height 需要裁剪的高
     8  * @return bool
     9  */
    10 function imagecropper($source_path, $target_width, $target_height)
    11 {
    12     $source_info   = getimagesize($source_path);
    13     $source_width  = $source_info[0];
    14     $source_height = $source_info[1];
    15     $source_mime   = $source_info['mime'];
    16     $source_ratio  = $source_height / $source_width;
    17     $target_ratio  = $target_height / $target_width;
    18 
    19     // 源图过高
    20     if ($source_ratio > $target_ratio) {
    21         $cropped_width  = $source_width;
    22         $cropped_height = $source_width * $target_ratio;
    23         $source_x       = 0;
    24         $source_y       = ($source_height - $cropped_height) / 2;
    25     } // 源图过宽
    26     elseif ($source_ratio < $target_ratio) {
    27         $cropped_width  = $source_height / $target_ratio;
    28         $cropped_height = $source_height;
    29         $source_x       = ($source_width - $cropped_width) / 2;
    30         $source_y       = 0;
    31     } // 源图适中
    32     else {
    33         $cropped_width  = $source_width;
    34         $cropped_height = $source_height;
    35         $source_x       = 0;
    36         $source_y       = 0;
    37     }
    38     $funcList = array(
    39         'image/gif'  => array(
    40             'create' => 'imagecreatefromgif',
    41             'make'   => 'imagegif',
    42             'mime'   => '.gif',
    43         ),
    44         'image/jpeg' => array(
    45             'create' => 'imagecreatefromjpeg',
    46             'make'   => 'imagejpeg',
    47             'mime'   => '.jpg',
    48         ),
    49         'image/png'  => array(
    50             'create' => 'imagecreatefrompng',
    51             'make'   => 'imagepng',
    52             'mime'   => '.png',
    53         ),
    54     );
    55     if (isset($funcList[$source_mime])) {
    56         $curFunc = $funcList[$source_mime];
    57     } else {
    58         return FALSE;
    59     }
    60     $source_image = $curFunc['create']($source_path);
    61 
    62     $target_image  = imagecreatetruecolor($target_width, $target_height);
    63     $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);
    64 
    65     // 裁剪
    66     imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
    67     // 缩放
    68     imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);
    69 
    70     //保存图片到本地(两者选一)
    71     $randNumber = mt_rand(00000, 99999) . mt_rand(000, 999);
    72     //$fileName   = substr(md5($randNumber), 8, 16) . ".png";
    73     $fileName = time() . '_' . substr(md5($randNumber), 8, 16) . $curFunc['mime'];
    74     //imagepng($target_image, './' . $fileName);
    75     //imagepng($target_image, './' . $fileName);
    76     //$imgFunc2($target_image, './' . $fileName);
    77     $curFunc['make']($target_image, './' . $fileName);
    78     imagedestroy($target_image);
    79 
    80     //直接在浏览器输出图片(两者选一)
    81     /*header('Content-Type: image/jpeg');
    82     imagepng($target_image);
    83     imagedestroy($target_image);
    84     imagejpeg($target_image);
    85     imagedestroy($source_image);
    86     imagedestroy($target_image);
    87     imagedestroy($cropped_image);*/
    88 }
    89 
    90 //调用
    91 //imagecropper('./img033.jpg',300,300);
    92 imagecropper('./4.jpg', 140, 140);
    93 //imagecropper('./img033.jpg',55,55);
    94 ?>

    <?php

    /**
    * 图像裁剪
    * @param $source_path 原图路径
    * @param $target_width 需要裁剪的宽
    * @param $target_height 需要裁剪的高
    * @return bool
    */
    function imagecropper($source_path, $target_width, $target_height)
    {
    $source_info = getimagesize($source_path);
    $source_width = $source_info[0];
    $source_height = $source_info[1];
    $source_mime = $source_info['mime'];
    $source_ratio = $source_height / $source_width;
    $target_ratio = $target_height / $target_width;

    // 源图过高
    if ($source_ratio > $target_ratio) {
    $cropped_width = $source_width;
    $cropped_height = $source_width * $target_ratio;
    $source_x = 0;
    $source_y = ($source_height - $cropped_height) / 2;
    } // 源图过宽
    elseif ($source_ratio < $target_ratio) {
    $cropped_width = $source_height / $target_ratio;
    $cropped_height = $source_height;
    $source_x = ($source_width - $cropped_width) / 2;
    $source_y = 0;
    } // 源图适中
    else {
    $cropped_width = $source_width;
    $cropped_height = $source_height;
    $source_x = 0;
    $source_y = 0;
    }
    $funcList = array(
    'image/gif' => array(
    'create' => 'imagecreatefromgif',
    'make' => 'imagegif',
    'mime' => '.gif',
    ),
    'image/jpeg' => array(
    'create' => 'imagecreatefromjpeg',
    'make' => 'imagejpeg',
    'mime' => '.jpg',
    ),
    'image/png' => array(
    'create' => 'imagecreatefrompng',
    'make' => 'imagepng',
    'mime' => '.png',
    ),
    );
    if (isset($funcList[$source_mime])) {
    $curFunc = $funcList[$source_mime];
    } else {
    return FALSE;
    }
    $source_image = $curFunc['create']($source_path);

    $target_image = imagecreatetruecolor($target_width, $target_height);
    $cropped_image = imagecreatetruecolor($cropped_width, $cropped_height);

    // 裁剪
    imagecopy($cropped_image, $source_image, 0, 0, $source_x, $source_y, $cropped_width, $cropped_height);
    // 缩放
    imagecopyresampled($target_image, $cropped_image, 0, 0, 0, 0, $target_width, $target_height, $cropped_width, $cropped_height);

    //保存图片到本地(两者选一)
    $randNumber = mt_rand(00000, 99999) . mt_rand(000, 999);
    //$fileName = substr(md5($randNumber), 8, 16) . ".png";
    $fileName = time() . '_' . substr(md5($randNumber), 8, 16) . $curFunc['mime'];
    //imagepng($target_image, './' . $fileName);
    //imagepng($target_image, './' . $fileName);
    //$imgFunc2($target_image, './' . $fileName);
    $curFunc['make']($target_image, './' . $fileName);
    imagedestroy($target_image);

    //直接在浏览器输出图片(两者选一)
    /*header('Content-Type: image/jpeg');
    imagepng($target_image);
    imagedestroy($target_image);
    imagejpeg($target_image);
    imagedestroy($source_image);
    imagedestroy($target_image);
    imagedestroy($cropped_image);*/
    }

    //调用
    //imagecropper('./img033.jpg',300,300);
    imagecropper('./4.jpg', 140, 140);
    //imagecropper('./img033.jpg',55,55);
    ?>

  • 相关阅读:
    开发工具 内存,性能检测工具
    数据结构 二分法查找
    C语言 goto语句
    C语言 结构体中的零长度数组
    C语言 结构体(联合体)对齐规则
    C++ STL堆操作
    C语言 sscanf用法详解
    Sword 内核队列二
    Sword 内核队列一
    Sword libcurl回调函数相关知识
  • 原文地址:https://www.cnblogs.com/zqifa/p/php-29.html
Copyright © 2020-2023  润新知