Изменение размера изображения и кадрирование - PullRequest
0 голосов
/ 25 января 2012

Я хочу изменить размер изображения таким образом, чтобы изменение размера всегда заполняло требуемую область.Я хочу, чтобы скрипт взял изображение любого размера, изменил размер самой короткой стороны до 90px, затем обрезал верх и низ (или левую и правую стороны, если это пейзаж), чтобы получить квадрат 90px на 90px

1 Ответ

2 голосов
/ 25 января 2012

Этот код делает это с функциями 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);
...