• PHP生成缩略图(2)--等比缩略图


    分析:

    当原图是横屏或竖屏的时候,希望缩略图会保持原来的比例缩放,不改变原图的完整性,即等比缩放!

    此时只需确定原图的宽高,以及目标图的最大宽高,比较目标图的宽高比例与原图的宽高比例的大小,以此来判断原图是横屏或竖屏来确定以高或宽为标准即可!

    代码如下:

    //求目标图片的宽高
    if ($max_width/$max_height < $src_width/$src_height) {
        
        $dst_w = $max_width;    //以宽为标准
        $dst_h = $max_width * $src_height/$src_width;
    }else{
        
        $dst_h = $max_height;   //以高为标准
        $dst_w = $max_height * $src_width/$src_height;
    }

    完整代码如下:

    <?php
    
    //目标图片最大宽高
    $max_width = 300;
    $max_height = 300;
    
    //创建一个真彩色的图像,支持的颜色数较多
    $dst = imagecreatetruecolor($max_width, $max_height); //目标图宽高
    $src = imagecreatefromjpeg('./01.jpg'); //源图
    
    $src_width = imagesx($src);    //源图的宽度
    $src_height = imagesy($src);    //源图的高度
    
    //求目标图片的宽高
    if ($max_width/$max_height < $src_width/$src_height) {
        
        //横屏图片以宽为标准
        $dst_w = $max_width;
        $dst_h = $max_width * $src_height/$src_width;
    }else{
        
        //竖屏图片以高为标准
        $dst_h = $max_height; 
        $dst_w = $max_height * $src_width/$src_height;
    }
    
    //在目标图上显示的坐标位置
    $dst_x = (int)(($max_width-$dst_w)/2);
    $dst_y = (int)(($max_height-$dst_h)/2);
    
    //生成缩略图
    imagecopyresampled($dst,$src,$dst_x,$dst_y,0,0,$dst_w,$dst_h,$src_width,$src_height);
    
    //输出到浏览器
    header('content-type:image/png');
    imagepng($dst);
    
    //销毁图片资源
    imagedestroy($dst);
    imagedestroy($src);
    
     ?>

    结果如下:

    竖屏图片

    横屏图片:

  • 相关阅读:
    os.path.join()
    图像旋转后出现黑点
    surging 微服务引擎 1.0 正式发布
    基于docker 如何部署surging分布式微服务引擎
    剥析surging的架构思想
    如何使用thrift 服务引擎组件
    谈谈surging 与多语言混合微服务构思
    surging 社区版本支持.net core 3.1
    surging 微服务引擎 -协议主机的Behavior特性
    谈谈surging 微服务引擎 2.0的链路跟踪和其它新增功能
  • 原文地址:https://www.cnblogs.com/zxf100/p/6744101.html
Copyright © 2020-2023  润新知