imagecopymerge()
是 PHP 中一个用于合并图像的函数
imagecopyresampled()
函数而不是 imagecopymerge()
来调整图像大小。imagecopyresampled()
函数会在调整大小时保持图像质量,从而减少模糊。// 加载图像
$sourceImage = imagecreatefromjpeg('source.jpg');
$destinationImage = imagecreatefromjpeg('destination.jpg');
// 获取图像尺寸
$sourceWidth = imagesx($sourceImage);
$sourceHeight = imagesy($sourceImage);
$destinationWidth = imagesx($destinationImage);
$destinationHeight = imagesy($destinationImage);
// 计算新的尺寸以保持纵横比
$ratio = min($destinationWidth / $sourceWidth, $destinationHeight / $sourceHeight);
$newWidth = intval($sourceWidth * $ratio);
$newHeight = intval($sourceHeight * $ratio);
// 调整图像大小
$resizedSourceImage = imagecreatetruecolor($newWidth, $newHeight);
imagecopyresampled($resizedSourceImage, $sourceImage, 0, 0, 0, 0, $newWidth, $newHeight, $sourceWidth, $sourceHeight);
// 将调整大小后的图像复制到目标图像
imagecopymerge($destinationImage, $resizedSourceImage, 0, 0, 0, 0, $newWidth, $newHeight, 100);
// 销毁图像资源
imagedestroy($sourceImage);
imagedestroy($destinationImage);
imagedestroy($resizedSourceImage);
imagecopymerge()
时,可以尝试使用不同的插值算法来提高图像质量。例如,可以使用 IMAGECOPYRESAMPLE_AREA
或 IMAGECOPYRESAMPLE_CUBIC
插值算法。imagecopymerge($destinationImage, $sourceImage, 0, 0, 0, 0, $destinationWidth, $destinationHeight, $sourceWidth, $sourceHeight, IMAGECOPYRESAMPLE_AREA);
请注意,这些方法可能会提高图像质量,但并不能完全消除模糊。实际效果取决于原始图像的质量和大小。如果可能的话,最好使用高分辨率的图像以获得更好的结果。