永发信息网

PHP裁剪 动态裁剪框,要求生成固定大小的图片

答案:1  悬赏:60  手机版
解决时间 2021-02-13 16:53
主要参数提供

裁剪框是动态大小,但是高宽比例固定
结果,例如裁剪框调整到500*300 那么图片就是500*300大小

要求:把裁剪结果缩小至150*100 (例如)固定尺寸的
如果大图缩小比例后 是 150*130 那么取 图片中间的部分。

代码参数:
PHP部分:

$imginfo = getimagesize($cfg_basedir.$file);
$imgw=$imginfo[0];
$imgh=$imginfo[1];
$temp=300/$imgw;
$newwidth=300;
$newheight=$imgh*$temp;
$srcFile = $cfg_basedir.$file;
$thumb = imagecreatetruecolor($newwidth, $newheight);
$thumba = imagecreatetruecolor($width, $height);

imagecopyresized($thumb, $source, 0,0, 0,0 , $newwidth, $newheight, $imgw, $imgh);
imagecopy($thumba,$thumb,0,0,$left,$top,$newwidth,$newheight);

htm 裁剪框部分:
<script type="text/javascript">
var scale=1;
var imgH=$("#faceImg").height();
var imgW=$("#faceImg").width();
var src=$("#faceImg").attr("src");
var scale=120/120;
$(function(){
$("#imgBox").width(imgW).height(imgH);
$("#setFace").width(700).height(imgH+4);
$("#imgCut").css("background","url(../../images/transparent.gif) repeat");
$("#faceImg_pre").height(imgH*scale);
$("#imgBox_pre div").scrollTop(20*scale).scrollLeft(20*scale);
});
$("#imgCut").draggable({
containment:$("#faceImg"),
drag:function(){
var temp_top=$(this).offset().top-$("#faceImg").offset().top;
var temp_left=$(this).offset().left-$("#faceImg").offset().left;
scale=90/$(this).height();
$("#faceImg_pre").height(imgH*scale);
$(this).css("background"," url(../../images/transparent.gif) repeat");
$("#imgBox_pre div").scrollTop(temp_top*scale).scrollLeft(temp_left*scale);
$("#width").val($(this).width());
$("#height").val($(this).height());
$("#left").val(($(this).offset().left-$("#faceImg").offset().left));
$("#top").val(($(this).offset().top-$("#faceImg").offset().top));
},
stop:function(){

}
});
$("#imgCut").resizable({
containment:$("#faceImg"),
handles:"all",
knobHandles:true,
aspectRatio:true,
minWidth:120,
minHeight:90,
resize:function(){
var temp_top=$(this).offset().top-$("#faceImg").offset().top;
var temp_left=$(this).offset().left-$("#faceImg").offset().left;
scale=90/$(this).height();
$("#faceImg_pre").height(imgH*scale);
$(this).css("background","url(../../images/transparent.gif) repeat");
$("#imgBox_pre div").scrollTop(temp_top*scale).scrollLeft(temp_left*scale);
$("#width").val($(this).width());
$("#height").val($(this).height());
$("#left").val(($(this).offset().left-$("#faceImg").offset().left));
$("#top").val(($(this).offset().top-$("#faceImg").offset().top));
},
stop:function(e,ui){

}
});
</script>

谢谢
PS。针对 PHP中 $temp=300/$imgw;
$newwidth=300; 说明一下。裁剪操作 图片最大显示宽度是300.CSS中定义了
最佳答案
<?php
$sourcefile = 'x.jpg';
#目标宽度
$newwidth = 150;
#目标高度
$newheight = 120;
#目标比例
$newbili = $newwidth / $newheight;

#源图片宽高
list($width, $height) = getimagesize($sourcefile);

if($width / $height > $newbili){
#原图较长
$w = $width - $newbili * $height;
$h = $height;
$x = ($width - $w) / 2;
$y = 0;
}else{
#原图较宽
$w = $width;
$h = $height - $newbili * $width;
$x = 0;
$y = ($height - $h) / 2;
}

$source = imagecreatefromjpeg($sourcefile);
$thumb = imagecreatetruecolor($newwidth, $newheight);

imagecopyresized($thumb, $source, 0, 0, $x, $y, $newwidth, $newheight, $w, $h);
imagejpeg($thumb, "a.jpg");

注:此程序未考虑原图比目标图片小的情况
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求找一首纯音乐,一开始是钢琴开头,然后后面
麦力快递地址好找么,我有些事要过去
手机多次格式化对手机有损伤吗?
【钟灵毓秀什么意思】古文中钟灵毓秀什么意思
江津市白沙宏达机械厂在什么地方啊,我要过去
什么种子都有种皮?
豪爵宾馆怎么去啊,有知道地址的么
【荫凉】一片阴凉还是一片荫凉蔷薇藤洒下“一
日日顺星级服务中心(桃源中路与长安路交叉口
上海铁路局南京货运中心地址在什么地方,想过
红房子蒸包(花园北路)地址有知道的么?有点事
为什么十年没见的老同学,在聚会见面时有点尴
如何进入联通宽带路由器设置界面
东风风神自动挡a60能改气吗,这个问题有什么好
根据波士顿矩阵分析法,饭店对于问题类业务一
推荐资讯
梦见仇人喝酒喝醉了
红米手机的图库怎么加密码?
重庆璧山地铁隧道打了多少米了
最近总是心里反应大总想身边人有不好的事发生
德邦(昌平区育新营业部)地址在哪,我要去那里
百嘉乐副食超市这个地址在什么地方,我要处理
神武为什么都不愿意和我组队
Thanks (a lot)打括号的换词语A.anyB.very mu
iphone自带相机功能怎么用
苹果专卖店DIGITALSPACE怎么去啊,我要去那办
茅仙洞风景区-望淮亭地址在什么地方,想过去
数控洗煤机咋样调整风水
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?