图像调整大小和裁剪

Posted

技术标签:

【中文标题】图像调整大小和裁剪【英文标题】:Image Resize & Crop 【发布时间】:2012-01-25 14:00:57 【问题描述】:

我想调整图像大小,使调整后的大小始终填满所需区域。我希望脚本拍摄任何尺寸的图像,将最短边的大小调整为 90px,然后裁剪顶部和底部(如果是横向,则裁剪左右边)以获得 90px x 90px 的正方形

【问题讨论】:

你能展示一下你尝试过的东西吗? 我使用 Codeigniter Image_lib 调整大小 【参考方案1】:

此代码使用 GD 函数完成此操作。

源图像可以是 JPEG、PNG、GIF 或 BMP 格式。如果您事先知道格式,则可以摆脱 switch 语句。结果保存为 JPEG。

                    $srcPath = "your source image path goes here";
                    $dstPath = "your destination image path goes here";
                    $size = "90x90";

                    list($w, $h, $type) = getimagesize($srcPath);

                    switch ($type) 
                            case IMAGETYPE_JPEG:
                                    $src = imagecreatefromjpeg($srcPath);
                                    break;
                            case IMAGETYPE_PNG:
                                    $src = imagecreatefrompng($srcPath);
                                    break;
                            case IMAGETYPE_GIF:
                                    $src = imagecreatefromgif($srcPath);
                                    break;
                            case IMAGETYPE_BMP:
                                    $src = imagecreatefrombmp($srcPath);
                                    break;
                    

                    list($dst_w, $dst_h) = explode('x', $size);
                    $dst = imagecreatetruecolor($dst_w, $dst_h);

                    $dst_x = $dst_y = 0;
                    $src_x = $src_y = 0;

                    if ($dst_w/$dst_h < $w/$h) 
                            $src_w = $h*($dst_w/$dst_h);
                            $src_h = $h;
                            $src_x = ($w-$src_w)/2;
                            $src_y = 0;
                     else 
                            $src_w = $w;
                            $src_h = $w*($dst_h/$dst_w);
                            $src_x = 0;
                            $src_y = ($h-$src_h)/2;
                    

                    imagecopyresampled($dst, $src, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h);

                    imagejpeg($dst, $dstPath);
                    imagedestroy($src);
                    imagedestroy($dst);

【讨论】:

它正在创建一个黑色图像 90*90 虽然这是完全有效的,但使用 CodeIgniter 执行此操作是一种非常低效的方法,它有自己的库来完成此任务。

以上是关于图像调整大小和裁剪的主要内容,如果未能解决你的问题,请参考以下文章

PHP:图像调整大小和裁剪为纵向

调整图像大小和裁剪图像

通过调整图像 url 将图像裁剪为正确大小

C#:同时调整图像大小和裁剪

带有裁剪和调整大小的图像上传器

在 UITableViewCells 中显示之前调整图像大小和裁剪图像