PHP对图片的处理

图片处理函数功能:缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色处理并保存历史记录的思路:当有图片有改动时自动生成一张新图片

PHP对图片的处理

图片处理函数功能:缩放、剪切、相框、水印、锐化、旋转、翻转、透明度、反色处理并保存历史记录的思路:当有图片有改动时自动生成一张新图片

1、转Base64编码
/**
 * 获取图片的Base64编码(不支持url)
 * @param $img_file 传入本地图片地址
 * @return string
 */
function imgToBase64($img_file) {
    $img_base64 = '';
    if (file_exists($img_file)) {
        $app_img_file = $img_file; // 图片路径
        $img_info = getimagesize($app_img_file); // 取得图片的大小,类型等
        //echo '<pre>' . print_r($img_info, true) . '</pre><br>';
        list($width, $height, $type, $attr) = getimagesize($app_img_file);
        $fp = fopen($app_img_file, "r"); // 图片是否可读权限
        if ($fp) {
            $filesize = filesize($app_img_file);
            $content = fread($fp, $filesize);
            $file_content = chunk_split(base64_encode($content)); // base64编码
            switch ($type) {           //判读图片类型
                case 1: $img_type = "gif";
                    break;
                case 2: $img_type = "jpg";
                    break;
                case 3: $img_type = "png";
                    break;
            }
            $img_base64 = 'data:image/png;base64,' . $file_content;//合成图片的base64编码
        }
        fclose($fp);
    }else{
        return $img_file;
    }
    return $img_base64; //返回图片的base64
}
2、图片旋转
/**
 * 图片旋转
 * @param $src 图片地址
 * @param $direction 1顺时针90   2 逆时针90
 * @return string
 */
function imgturn($src, $direction = 1){
    $ext = pathinfo($src)['extension'];
    switch ($ext) {
        case 'gif':
            $img = imagecreatefromgif($src);
            break;
        case 'jpg':
        case 'jpeg':
            $img = imagecreatefromjpeg($src);
            break;
        case 'png':
            $img = imagecreatefrompng($src);
            break;
        default:
            die('图片格式错误!');
            break;
    }
    $width = imagesx($img);
    $height = imagesy($img);
    $img2 = imagecreatetruecolor($height, $width);
    //顺时针旋转90度
    if($direction == 1){
        for ($x = 0; $x < $width; $x++) {
            for($y=0; $y<$height; $y++) {
                imagecopy($img2, $img, $height - 1 - $y, $x, $x, $y, 1, 1);
            }
        }
    }else if($direction == 2) {
        //逆时针旋转90度
        for ($x = 0; $x < $height; $x++) {
            for($y = 0; $y < $width; $y++) {
                imagecopy($img2, $img, $x, $y, $width - 1 - $y, $x, 1, 1);
            }
        }
    }
    switch ($ext) {
        case 'jpg':
        case "jpeg":
            imagejpeg($img2, $src, 100);
            break;
        case "gif":
            imagegif($img2, $src, 100);
            break;
        case "png":
            imagepng($img2, $src, 100);
            break;
        default:
            die('图片格式错误!');
            break;
    }
    imagedestroy($img);
    imagedestroy($img2);
}
3、图片压缩
/**
* 图片压缩处理
* @param string $sFile 源图片路径
* @param int $iWidth 自定义图片宽度
* @param int $iHeight 自定义图片高度
* @return string  压缩后的图片路径
*/
function getThumb($sFile, $iWidth, $iHeight){
    //图片公共路径
    $public_path = '';
    //判断该图片是否存在
    if(!file_exists($public_path . $sFile)) return $sFile;

    list($width, $height, $type, $attr) = getimagesize($sFile);
    if($width < $height){
        imgturn($sFile, 2);
    }

    //判断图片格式(图片文件后缀)
    $extend = explode("." , $sFile);
    $attach_fileext = strtolower($extend[count($extend) - 1]);
    if (!in_array($attach_fileext, array('jpg','png','jpeg'))){
        return '';
    }
    //压缩图片文件名称
    $sFileNameS = str_replace("." . $attach_fileext,  "_" . $iWidth . '_' . $iHeight . '.' . $attach_fileext, $sFile);
    //判断是否已压缩图片,若是则返回压缩图片路径
    if(file_exists($public_path . $sFileNameS)){
        return $sFileNameS;
    }
    //生成压缩图片,并存储到原图同路径下
    resizeImage($public_path . $sFile, $public_path . $sFileNameS, $iWidth, $iHeight);
    if(!file_exists($public_path . $sFileNameS)){
        return $sFile;
    }
    return $sFileNameS;
}

生成目标图片

/**
 * 生成图片
 * @param string $im 源图片路径
 * @param string $dest 目标图片路径
 * @param int $maxwidth 生成图片宽
 * @param int $maxheight 生成图片高
 */
function resizeImage($im, $dest, $maxwidth, $maxheight) {
    $img = getimagesize($im);
    switch ($img[2]) {
        case 1:
            $im = @imagecreatefromgif($im);
        break;
        case 2:
            $im = @imagecreatefromjpeg($im);
        break;
        case 3:
            $im = @imagecreatefrompng($im);
        break;
    }
    $pic_width = imagesx($im);
    $pic_height = imagesy($im);
    $resizewidth_tag = false;
    $resizeheight_tag = false;
    if (($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) {
        if ($maxwidth && $pic_width > $maxwidth) {
            $widthratio = $maxwidth / $pic_width;
            $resizewidth_tag = true;
        }
        if ($maxheight && $pic_height > $maxheight) {
            $heightratio = $maxheight / $pic_height;
            $resizeheight_tag = true;
        }
        if ($resizewidth_tag && $resizeheight_tag) {
            if ($widthratio < $heightratio){
                $ratio = $widthratio;
            }else{
                $ratio = $heightratio;
            }
        }
        if ($resizewidth_tag && !$resizeheight_tag){
            $ratio = $widthratio;
        }
        if ($resizeheight_tag && !$resizewidth_tag){
            $ratio = $heightratio;
        }
        $newwidth = $pic_width * $ratio;
        $newheight = $pic_height * $ratio;
        if (function_exists("imagecopyresampled")) {
            $newim = imagecreatetruecolor($newwidth, $newheight);
            imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
        } else {
            $newim = imagecreate($newwidth, $newheight);
            imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
        }
        imagejpeg($newim, $dest);
        imagedestroy($newim);
    } else {
        imagejpeg($im, $dest);
    }
}
上一篇:用Python实现编程语言 20 年的动态排行榜 下一篇:PHP执行Python脚本解压,压缩文件夹操作

评论

评论(0)

暂无评论