联系官方销售客服

1835022288

028-61286886

开发框架 版主:迅睿框架研发组
的缩略图可以从中间截取指定大小图片吗我看人家都可以图图!图是
类型:迅睿CMS 更新时间:2020-11-25 16:25:51 缩略图 截取 迅睿

迅睿的缩略图,可以从中间截取指定大小图片吗?

我看人家 wordpress 都可以,图2,图3!

图3是长图,图2的缩略图是从图3中截图中间部分


为什么迅睿的指定大小会压缩图片是下面图1这样?

难道开发者觉得这样的压缩?符合常理?

image



image



image

回帖
  • 小黄人 18html.com
    #1楼    小黄人 18html.com
    2020-04-22 10:27:58
    Chrome 0
    只设置宽度,或者只设置高度!会导致图片长短不一
  • #2楼    迅睿框架创始人
    2020-04-22 10:28:39
    Google Pixel 手机 0
    我觉得还可以你可以把代码发给我,新版我在做一个函数
  • 小黄人 18html.com
    #3楼    小黄人 18html.com
    2020-04-22 10:33:33
    Chrome 0
    回复迅睿框架创始人理论上,迅睿默认的裁剪应该是符合产品类网站!如果类似博客资讯类的,像 头条 那样,他们是直接裁剪的,不是压缩等比!官网的函数应该是压缩,而非裁剪类型的操作!
  • 小黄人 18html.com
    #4楼    小黄人 18html.com
    2020-04-22 10:37:09
    Chrome 0
    ********此内容仅楼主可见********

    2

    pic
    满意答案
  • 小黄人 18html.com
    #5楼    小黄人 18html.com
    2020-04-22 10:56:54
    Chrome 0
    回复迅睿框架创始人能不能先更新一下这个函数? 做模板用
  • #6楼    迅睿框架创始人
    2020-04-22 16:33:16
    Chrome 0

    image
    你这个函数不行啊,报错了
  • 小黄人 18html.com
    #7楼    小黄人 18html.com
    2020-04-22 16:35:03
    Chrome 0
    回复迅睿框架创始人直接存为 pic.php 是可以直接运行的!
  • 小黄人 18html.com
    #8楼    小黄人 18html.com
    2020-04-22 16:55:37
    Chrome 0
    回复迅睿框架创始人你这个乱码,是图片的码吧!把 header 注释掉就不是流媒体啦!然后 imagejpeg 后面加路径,就会保存啦!!!!! //header('Content-Type: image/jpeg'); imagejpeg($target_image,'uploadfile/thumb/2.jpg');
  • #9楼    迅睿框架创始人
    2020-04-22 16:59:31
    Chrome 0
    png会报错
  • 小黄人 18html.com
    #10楼    小黄人 18html.com
    2020-04-22 17:10:32
    Chrome 0
    回复迅睿框架创始人3个格式均可裁剪!但是不居中裁剪,是从上到下的,理论上,可以设置居中还是居底,居顶裁剪!
    // 获得任意大小图像,不足地方拉伸,不产生变形,不留下空白
    function image_resize($src_file, $dst_file, $new_width, $new_height)
    {
    
        $source_info  = getimagesize($src_file);
        $type  = $source_info['mime'];
    
    //echo $type;
    
    
        $new_width = intval($new_width);
    
        $new_height = intval($new_height);
    
        if ($new_width < 1 || $new_height < 1)
        {
            echo "params width or height error !";
            exit();
        }
    
        if (!file_exists($src_file))
        {
            echo $src_file . " is not exists !";
            exit();
        }
    
    
    //Load image
    
        switch($type){
            case 'image/jpeg':
    
                $src_img = imagecreatefromjpeg($src_file);
                break;
    
            case 'image/png':
    
                $src_img = imagecreatefrompng($src_file);
                break;
    
            case 'image/gif':
    
                $src_img = imagecreatefromgif($src_file);
                break;
    
            default :
                echo "Load image error!";
                exit();
        }
    
        $w = imagesx($src_img);
    
        $h = imagesy($src_img);
    
        $ratio_w = 1.0 * $new_width / $w;
    
        $ratio_h = 1.0 * $new_height / $h;
    
        $ratio = 1.0;
    
    // 生成的图像的高宽比原来的都小,或都大 ,原则是 取大比例放大,取大比例缩小(缩小的比例就比较小了)
    
        if (($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1))
        {
    
            if ($ratio_w < $ratio_h) {
    
                $ratio = $ratio_h;
    
    // 情况一,宽度的比例比高度方向的小,按照高度的比例标准来裁剪或放大
    
            } else {
    
                $ratio = $ratio_w;
    
            }
    
            // 定义一个中间的临时图像,该图像的宽高比 正好满足目标要求
    
            $inter_w = (int)($new_width / $ratio);
    
            $inter_h = (int)($new_height / $ratio);
    
            $inter_img = imagecreatetruecolor($inter_w, $inter_h);
    
            //var_dump($inter_img);
    
            imagecopy($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h);
    
            // 生成一个以最大边长度为大小的是目标图像$ratio比例的临时图像
            // 定义一个新的图像
            ini_set ('memory_limit', '8M');    //更改PHP的内存限制
            $new_img = imagecreatetruecolor($new_width, $new_height);
    
            //var_dump($new_img);exit();
            imagecopyresampled($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height, $inter_w, $inter_h);
    
            switch($type)
            {
                case 'image/jpeg':
    
            // 存储图像
                    imagejpeg($new_img, $dst_file, 100);
    
                    break;
    
                case 'image/png':
    
                    imagepng($new_img, $dst_file, 9);
    
                    break;
    
                case 'image/gif':
    
                    imagegif($new_img, $dst_file, 100);
    
                    break;
    
                default :
    
                    break;
            }
    
        }// end if 1
    
    // 2 目标图像 的一个边大于原图,一个边小于原图 ,先放大平普图像,然后裁剪
    
    // =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
    
        else {
    
            $ratio = $ratio_h > $ratio_w ? $ratio_h : $ratio_w;
    
    //取比例大的那个值
    
    // 定义一个中间的大图像,该图像的高或宽和目标图像相等,然后对原图放大
    
            $inter_w = (int)($w * $ratio);
    
            $inter_h = (int)($h * $ratio);
    
            $inter_img = imagecreatetruecolor($inter_w, $inter_h);
    
    //将原图缩放比例后裁剪
    
            imagecopyresampled($inter_img, $src_img, 0, 0, 0, 0, $inter_w, $inter_h, $w, $h);
    
    // 定义一个新的图像
    
            $new_img = imagecreatetruecolor($new_width, $new_height);
    
            imagecopy($new_img, $inter_img, 0, 0, 0, 0, $new_width, $new_height);
    
            switch($type)
            {
                case 'image/jpeg':
    // 存储图像
                    imagejpeg($new_img, $dst_file, 100);
    
                    break;
    
                case 'image/png':
    
                    imagepng($new_img, $dst_file, 9);
                    break;
    
                case 'image/gif':
    
                    imagegif($new_img, $dst_file, 100);
    
                    break;
    
                default :
    
                    break;
            }
    
        }// if3
    
    }// end function
    //输出新图片
    image_resize('1.gif', 'demo1.jpg', '210px', '140px');
  • 小黄人 18html.com
    #11楼    小黄人 18html.com
    2020-04-22 17:11:16
    Chrome 0
    要获取图片高度,然后计算裁剪的起点和结束点,就可以居中裁剪了
  • 小黄人 18html.com
    #12楼    小黄人 18html.com
    2020-04-22 17:11:57
    Chrome 0
    从第一套代码里获取的
    if ($source_ratio > $target_ratio){
        // image-to-height
        $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){
        //image-to-widht
        $cropped_width = $source_height / $target_ratio;
        $cropped_height = $source_height;
        $source_x = ($source_width - $cropped_width) / 2;
        $source_y = 0;
      }else{
        //image-size-ok
        $cropped_width = $source_width;
        $cropped_height = $source_height;
        $source_x = 0;
        $source_y = 0;
      }
  • 小黄人 18html.com
    #13楼    小黄人 18html.com
    2020-04-22 17:13:46
    Chrome 0
    做php缩微图程序,用到了imagecopyresampled函数,在网上找了很多说明也没搞懂后面的参数到底是什么意思,试了很多遍终于明白。
    bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h ,int $src_w , int $src_h )
    $dst_image:新建的图片
    $src_image:需要载入的图片
    $dst_x:设定需要载入的图片在新图中的x坐标
    $dst_y:设定需要载入的图片在新图中的y坐标
    $src_x:设定载入图片要载入的区域x坐标
    $src_y:设定载入图片要载入的区域y坐标
    $dst_w:设定载入的原图的宽度(在此设置缩放)
    $dst_h:设定载入的原图的高度(在此设置缩放)
    $src_w:原图要载入的宽度
    $src_h:原图要载入的高度
  • 严波
    #14楼    严波
    2020-04-23 12:24:38
    Chrome 0
    要获取图片高度,然后计算裁剪的起点和结束点,就可以居中裁剪了
  • 小黄人 18html.com
    #15楼    小黄人 18html.com
    2020-04-23 12:33:19
    Chrome 0
    严波你有仔细看回复的内容吗?
  • 小黄人 18html.com
    #16楼    小黄人 18html.com
    2020-11-25 16:25:51
    Chrome 0
    @小黄人 18html.com:完结之后本帖将不再提供回复