使用 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