上传时如何裁剪图像?

Posted

技术标签:

【中文标题】上传时如何裁剪图像?【英文标题】:How to crop an image while uploading? 【发布时间】:2010-07-16 10:37:29 【问题描述】:

我正在做一个社交网络项目,我可以选择添加/编辑照片,当用户单击按钮时,图像将被上传到数据库并更新......是否可以裁剪图像在保存到数据库之前。

【问题讨论】:

如果您想在保存文件之前裁剪服务器端,您可以使用 GD 图像库php.net/manual/en/book.image.php 创建图像的副本php.net/manual/en/function.imagecopyresampled.php 进行裁剪的函数是@ 【参考方案1】:

只需调用这个函数 ..with 参数源,目的地和大小你想要的 :)

function cropImage($source,$dest,$whsize) 

                $size = getimagesize($source);
                $w = $size[0];
                $h = $size[1];
                $xratio=$w/$whsize;
                $yratio=$h/$whsize;

                if($xratio > $yratio)$multiplier=$xratio;
                else $multiplier=$yratio;

                $nw=$w/$multiplier;
                $nh=$h/$multiplier;
                switch($size[2]) 
                    case '1':
                    $simg = imagecreatefromgif($source);
                    break;
                    case '2':
                    $simg = imagecreatefromjpeg($source);
                    break;
                    case '3':
                    $simg = imagecreatefrompng($source);
                    break;
                

                $dimg = imagecreatetruecolor($nw, $nh);

                $wm = $w/$nw;
                $hm = $h/$nh;

                $h_height = $nh/2;
                $w_height = $nw/2;

                if($w> $h) 

                    $adjusted_width = $w / $hm;
                    $half_width = $adjusted_width / 2;
                    $int_width = $half_width - $w_height;

                    imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);

                 elseif(($w <$h) || ($w == $h)) 

                    $adjusted_height = $h / $wm;
                    $half_height = $adjusted_height / 2;
                    $int_height = $half_height - $h_height;

                    imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);

                 else 
                    imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
                
             $dest=$dest.'jpeg';
                imagejpeg($dimg,$dest,100);
               

【讨论】:

这是裁剪图像的方式【参考方案2】:

在客户端,我推荐JCrop。

【讨论】:

【参考方案3】:

当然,将文件从上传目录移到某个临时目录中,将该位置存储在他们的会话中,然后将其显示给他们并让他们在将其移至生产区域并将其插入之前对其进行裁剪数据库。

【讨论】:

以上是关于上传时如何裁剪图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何选择图像的区域进行裁剪?

如何在angularjs中使用ng-file上传裁剪和上传图像

当我们上传图像时,是不是有任何反应原生包可以像 instagram 一样自动裁剪图像?

上传前裁剪图像时不获取路径

Laravel 多次上传图像预览然后裁剪

带有裁剪参数的拇指上传