PHP生成缩略图的方法实例(附代码)

生成缩略图需要用到如下代码:

$source_path:原图的路径

$NewImagePath:生成缩略图路径

$target_width:缩略图宽度

$target_height:缩略图高度

详细代码如下:

 

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

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

= $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/4476.html

(0)
上一篇 2018年2月28日 09:48
下一篇 2018年2月28日 14:59

相关推荐

  • 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日
    0154
  • 重蔚php学习第三十五天——php表单传值

    表单的概念 软件(网站)主要目的:对数据的管理 数据的管理:收集、整理、存储、发布 其实数据的收集主要通过表单实现的。 <form>        <input type=’text’ name=’email’ />        <input type=’...

    2017年10月17日
    0115
  • PHP微信支付开发实例详细教程​(附代码)

    HP微信支付开发过程,分享给大家,供大家参考,具体内容如下 1.开发环境 Thinkphp 3.2.3 微信:服务号,已认证 开发域名:http://test.paywechat.com (自定义的域名,外网不可访问) 2.需要相关文件和权限 微信支付需...

    2018年3月7日
    0104
  • 重蔚自留地php学习第45天——序列化-自定义自动加载-迭代

    回顾 面向对象三大特性 封装:隐藏数据实现,提供外部调用的方法 继承:实现代码的重用,提高效率 多态:方法的重载,PHP不支持多态   PHP继承:extends 如果一个类是用来被实例化的,那么尽可能的将内容私有化...

    2019年1月11日
    0167
  • php类与对象的关系

    介绍 在面向对象编程中,最重要的概念就是 类 和对象,因此我们必须将他们的关系和区别搞清楚. 举例说明 说明: 从上面的代码我们可以看出 一个类可以创建多个对象 不同的对象的标识符#编码,是不一样的,有系统在创...

    2018年4月9日
    0179
  • 关于php preg_replace_callback回调函数传参问题

    preg_replace_callback这个函数的作用是执行一个正则表达式搜索并且使用一个回调进行替换preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]]...

    2022年6月25日
    049
  • php实现断点续传大文件

    一、断点续传原理所谓断点续传,也就是要从文件已经下载的地方开始继续下载。在以前版本的 HTTP 协议是不支持断点的,HTTP/1.1 开始就支持了。一般断点下载时才用到 Range 和 Content-Range 实体头。不使用断点续传g...

    2022年6月27日
    040
  • 详解php版阿里云OSS图片上传类

    本文实例讲述了php版阿里云OSS图片上传类。分享给大家供大家参考,具体如下:【...

    2022年6月17日
    074