PHP生成缩略图有实现过,但是生成填充白边的实现过吗?-(附代码)

PHP生成缩略图有实现过,但是生成填充白边的实现过吗?-(附代码)

PHP生成缩略图,相信很多人都实现过吧,没有的友友也看看吧。最近在坐一个生成缩略图的功能,还要要求上传的图片没有和限制的宽高的话,自动补白边,以下是自己实践过的例子,和大家分享一下,我主要用的还是laravel框架的,以下方法适用其他的框架,原生的也是可以的。其实懂PHP的友友,用在哪里都是可以的

$source_path:原图的路径

$NewImagePath:生成缩略图路径

$target_width:缩略图宽度

$target_height:缩略图高度

 

<?php function getCropper($source_path,$NewImagePath, $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;
        }

        switch ($source_mime)
        {
            case 'image/gif':
                $source_image = imagecreatefromgif($source_path);
                break;

            case 'image/jpeg':
                $source_image = imagecreatefromjpeg($source_path);
                break;

            case 'image/png':
                $source_image = imagecreatefrompng($source_path);
                break;

            default:
                return false;
                break;
        }

        $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);


        header('Content-Type: image/jpeg');
        imagejpeg($target_image,$NewImagePath,100);
        imagedestroy($source_image);
        imagedestroy($target_image);
        imagedestroy($cropped_image);

    }

以下方法是生成缩略图,填充白边的方法

<?php //生成缩略图,填充白边 function getCrops($src_path,$NewImagePath,$width,$height){ //源图对象 $src_image = imagecreatefromstring(file_get_contents($src_path)); $source_info = getimagesize($src_path); $source_mime = $source_info['mime']; $src_width = imagesx($src_image); $src_height = imagesy($src_image); switch ($source_mime) { case 'image/gif': $src_image = imagecreatefromgif($src_path); break; case 'image/jpeg': $src_image = imagecreatefromjpeg($src_path); break; case 'image/png': $src_image = imagecreatefrompng($src_path); break; default: return false; break; } //生成等比例的缩略图 //$tmp_image_width = 0; //$tmp_image_height = 0; if ($src_width / $src_height >= $width / $height) {

            $tmp_image_width = $width;
            $tmp_image_height = round($tmp_image_width * $src_height / $src_width);

        } else {

            $tmp_image_height = $height;
            $tmp_image_width = round($tmp_image_height * $src_width / $src_height);
        }

        $tmpImage = imagecreatetruecolor($tmp_image_width, $tmp_image_height);
        imagecopyresampled($tmpImage, $src_image, 0, 0, 0, 0, $tmp_image_width, $tmp_image_height, $src_width, $src_height);

        //添加白边
        $final_image = imagecreatetruecolor($width, $height);
        $color = imagecolorallocate($final_image, 255, 255, 255);
        imagefill($final_image, 0, 0, $color);
        $x = round(($width - $tmp_image_width) / 2);
        $y = round(($height - $tmp_image_height) / 2);
        imagecopy($final_image, $tmpImage, $x, $y, 0, 0, $tmp_image_width, $tmp_image_height);

        //输出图片
        header('Content-Type: image/jpeg');
        imagejpeg($final_image,$NewImagePath,100);
        imagedestroy($src_image);
        imagedestroy($final_image);


    }

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/9718.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
重蔚重蔚管理团队
上一篇 2018年8月27日 00:00
下一篇 2018年8月27日 08:54

相关推荐

  • PHP与Redis性能监控。

    随着互联网技术的快速发展,网站访问量越来越大,对服务器的性能要求也越来越高。PHP这种脚本语言,由于其开发效率高、易学易用等优点,已经成为了互联网开发中的一种热门语言。而Redis这个高性能的数据缓存处理软…

    2023年5月21日
    02
  • (实用篇)php 文件夹删除,清除缓存程序

    具体代码如下: <?php header('content-type:text/html;charset=utf-8'); function delFile($fpath) { $filesize = array(); $filepath = iconv('gb2312', 'utf-8', $fpath); if (is_dir($fpath)) { if ($dh = o…

    2016年10月22日
    0315
  • PHP中的代码管理工具。

    PHP是一种常用的动态编程语言,用于构建各种Web应用程序。为了有效地管理PHP代码,开发人员可以使用各种代码管理工具。本文将介绍几个常见的PHP代码管理工具以及它们的优势。GitGit是最受欢迎的版本控制系统之一,…

    2023年5月28日
    06
  • php常用函数-(9)php session处理方面的常用函数

    session_cache_expire — Return current cache expire session_cache_limiter — Get and/or set the current cache limiter session_commit — session_write_close() 的别名 session_decode — Decodes session data…

    2015年12月7日
    0337
  • 关于lamp的搭建。

    搭建LAMP环境是创建基于Linux操作系统的服务器,安装Apache作为Web服务器,MySQL作为数据库管理系统以及PHP作为服务端脚本语言的过程,LAMP是一个流行的开源网站解决方案堆栈,被广泛用于构建和部署动态网站和应用…

    2024年7月22日
    05
  • 使用PHP开发直播功能的详细教程。

    随着网络技术的不断发展,直播功能正在变得越来越流行。在这样一个背景下,越来越多的开发者正在使用PHP语言开发直播功能,以满足市场需求。本篇文章将针对如何使用PHP语言开发直播功能,提供一个详细的教程,帮助…

    2023年5月30日
    045
  • PHP常用函数-(3)php时间处理常用的函数

    checkdate — 验证一个格里高里日期 date_default_timezone_get — 取得一个脚本中所有日期时间函数所使用的默认时区 date_default_timezone_set — 设定用于一个脚本中所有日期时间函数的默认时区 date_time_set — Se…

    2015年12月7日
    0292
  • 打造流畅和高效的PHP直播功能。

    随着现代互联网技术的快速发展,直播已成为一种流行的方式。直播不仅可以提供实时交流、互动和娱乐,还可以为企业、组织和个人提供无限的商业机会。在直播领域,PHP直播功能正在经历一次重要的变革,使得直播和其他…

    2023年5月23日
    02

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息