使用 PHP 进行调整大小

对图像进行预处理

ImageCreateFromJPEG($filename)

这样可以在内存(在这个程序中)中处理。

调整图片尺寸

bool imagecopyresampled(resource $dst_image,resource $src_image,
int $dst_x,int $dst_y,int $src_x,int $src_y,int 
$dst_w,int $dst_h,int $src_w,int $src_h)

参数
目标图像
复制的目标图像链接资源。
源图像
复制的源图像链接资源。
目标 x 坐标
复制到的目标图像的 x 坐标。
目标 y 坐标
复制到的目标图像的 y 坐标。
源 x 坐标
复制的源图像的 x 坐标。
源 y 坐标
复制的源图像的 y 坐标。
目标宽度
复制到的目标图像的宽度。
目标高度
复制到的目标图像的高度。
源宽度
复制的源图像的宽度。
源高度
复制的源图像的高度。

如果成功,则返回 TRUE;如果失败,则返回 FALSE。

输出或保存图像

bool imagejpeg ( resource $image [, string $filename [, int $quality ]] )

传入参数
图片
指定图像资源。

文件名
当将图像资源保存到文件时,请指定文件名。
质量
可以从0(低质量)到100(高质量)来指定图像的质量。默认为75。
返回值
如果成功输出/创建图像,则返回true;否则返回false。

实际上调整大小

$filename = "画像パス"
if (mime_content_type($filename) == 'image/jpeg') {
          $image = ImageCreateFromJPEG($filename);
          $size = getimagesize($filename);
        }else {
          $image = ImageCreateFromPNG($filename);
          $size = getimagesize($filename);
        }



        //白紙の画像を作成
        $image2 = ImageCreateTrueColor(640, 480);
        //リサイズ処理
        imagecopyresampled($image2, $image, 0, 0, 0, 0, 640, 480, $size[0], $size[1]);

        //保存
        if (mime_content_type($filename) == 'image/jpeg') {
          imagejpeg($image2, $filename);
        }else {
          imagepng($image2, $filename);
        }

        //メモリ解放
        imagedestroy($image);

调整大小问题

原始尺寸为“宽400像素×高180像素”,但由于被指定为宽度为“200像素”的结果,保持纵横比例后,高度变为“90像素”。
只需指定其中一个参数,即可自动确定保持原始图像比例的高度或宽度。

width: auto;

调整大小的计算公式

当原始图像的宽度为X1,高度为Y1时,
调整尺寸后的图像的宽度为X2,高度为Y2,
那么当将X2设为任意值时,保持宽高比的情况下,Y2的值可以计算为:
Y2 = (X2 / X1) * Y1

实践

        //retinadisplay対応
        $resize_width = 462 * 2; //横幅決める
        $resize_height = $resize_width / $size[0] * $size[1]; //縦を比率崩さず出す
        //白紙の画像を作成
        $image2 = ImageCreateTrueColor($resize_width, $resize_height);
        //リサイズ処理
        imagecopyresampled($image2, $image, 0, 0, 0, 0, $resize_width, $resize_height, $size[0], $size[1]);

完成


if (mime_content_type($filename) == 'image/jpeg') {
          $image = ImageCreateFromJPEG($filename);
          $size = getimagesize($filename);
        }else {
          $image = ImageCreateFromPNG($filename);
          $size = getimagesize($filename);
        }


        //retinadisplay対応
        $resize_width = 462 * 2; //横幅決める
        $resize_height = $resize_width / $size[0] * $size[1]; //縦を比率崩さず出す
        //白紙の画像を作成
        $image2 = ImageCreateTrueColor($resize_width, $resize_height);

        $x = 0;
        $y = 0;
        $x = floor(($size[0] - $size[1]) / 2);  //切り取るx軸の中心
        $y = floor(($size[1] - $size[0]) / 2);  //切り取るx軸の中心
        //リサイズ処理
        imagecopyresampled($image2, $image, 0, 0, $x, $y, $resize_width, $resize_height, $size[0], $size[1]);

        //保存
        if (mime_content_type($filename) == 'image/jpeg') {
          imagejpeg($image2, $filename);
        }else {
          imagepng($image2, $filename);
        }

        //メモリ解放
        imagedestroy($image);

以下是相關資源的參考:https://blog.ver001.com/php_image_resize_object-fit/
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11117777576
https://qiita.com/mikakane/items/290301a308277a384c2d
http://iekasegu.work/column.php?no=144

广告
将在 10 秒后关闭
bannerAds