展开

如何解决帝国cms裁剪图片时的黑框问题

发布于 2022-11-09 13:04:51     浏览 253

如何解决帝国cms裁剪图片时的黑框问题

适用环境:

型号:台式机
系统:win10
版本:帝国cms 7.2

问题解析:

【】

1、 在使用帝国cms搭建后台系统后,在生成标题图片时,只要是原图宽高比大于1,设置裁切宽高比不符合原图比例时,图片在裁切后都会出现黑框。网上找了较多类似的的解决办法,大体都是将原图图片裁剪后铺满目标图,无法保持原图按比例大小显示在目标图正中央。
如何解决帝国cms裁剪图片时的黑框问题
在使用帝国cms搭建后台系统后,在生成标题图片时,只要是原图宽高比大于1,设置裁切宽高比不符合原图比例时,图片在裁切后都会出现黑框。网上找了较多类似的的解决办法,大体都是将原图图片裁剪后铺满目标图,无法保持原图按比例大小显示在目标图正中央。
2、 起初觉得在图片裁切时给目标图渲染上白色就可以,但最后是我天真了,基本没效果,黑色边框依然在。裁切函数在“/e/class/gd.php”文件中的ResizeImage方法。
如何解决帝国cms裁剪图片时的黑框问题
起初觉得在图片裁切时给目标图渲染上白色就可以,但最后是我天真了,基本没效果,黑色边框依然在。裁切函数在“/e/class/gd.php”文件中的ResizeImage方法。
3、 后来发现,原图在裁切时使用了负坐标值,导致在渲染目标图时覆盖了白色背景。也就是说原图在负数到0的坐标间内容都是空的,被黑色替代。这下好了,具体原因也找到了,那么解决方法就简单多了。1、在“if($resize == 1)”代码位置前加上如下代码:
$tempx2      = 0;  // 定义目标图起始x坐标
$tempy2      = 0;  // 定义目标图起始y坐标
$wsize       = 0;  // 定义目标图渲染宽度

2、然后在“if($big_width > $big_height){....}”条件语句内末尾加入如下代码:
if($srcX<0)
{
    $tempx2 = ($max_width-($big_width/$big_height)*$max_height)/2; // 计算目标图渲染起始x坐标
    $tempy2 = 0;
    $srcX   = 0; // 将原图负值清零
    $tempx  = $big_width; // 原图宽度保持不变
    $wsize  = -($tempx2*2); //调整目标图渲染区宽度
}    

3、最后修改imagecopyresampled方法内的目标起始x和y值,同时修正目标图渲染宽度值即可,修改后的代码如下:
imagecopyresampled($temp_image, $big_image, $tempx2, $tempy2, $srcX, $srcY, ($new_width+$wsize), $new_height, $tempx, $tempy);
 

如何解决帝国cms裁剪图片时的黑框问题
后来发现,原图在裁切时使用了负坐标值,导致在渲染目标图时覆盖了白色背景。也就是说原图在负数到0的坐标间内容都是空的,被黑色替代。这下好了,具体原因也找到了,那么解决方法就简单多了。
4、 最终输出结果我以红色背景代替,可以清晰看到原图保持中间比例不变,无裁剪。同理,其他长宽比例可以根据这个思想去实践。
如何解决帝国cms裁剪图片时的黑框问题
最终输出结果我以红色背景代替,可以清晰看到原图保持中间比例不变,无裁剪。同理,其他长宽比例可以根据这个思想去实践。

插件/素材:

点击下载

相关推荐

猜你可能喜欢

点击加载更多