在图片上传模块中用 "imagecopyresampled" 替换 "imagecopyresized" 函数
Replacing "imagecopyresized" function with "imagecopyresampled" in image upload module
我目前在基于 Pligg CMS 的网站上工作,其默认图像上传模块将缩略图附加到来自用户提供的链接的帖子,正在使用 PHP 的 GD 库进行图像处理。结果缩略图质量下降,经过一些网络搜索后,我发现我应该用 imagecopyresampled
.
替换 imagecopyresized
函数
主要问题是我是web开发的菜鸟,不知从何下手。代码块我认为(因此可能是错误的)负责图像处理,需要编辑如下:
// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
while (file_exists("$thumb_dir/$name$i.jpg")) $i++;
$name = "$name$i.jpg";
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
if (!imagejpeg( $tmp_img, "$thumb_dir/$name",$settings['quality'] ))
$error .= "Can't create thumbnail $thumb_dir/$name";
else
$db->query("INSERT INTO ".table_prefix."files
SET file_size='$size',
file_orig_id='$orig_id',
file_user_id={$current_user->user_id},
file_link_id=$link_id,
file_ispicture=1,
file_comment_id='".$db->escape($_POST['comment'])."',
file_real_size='".filesize("$thumb_dir/$name")."',
file_name='".$db->escape($name)."'");
}
return $error;
据我所知,图像首先通过 imagecreatruecolor
函数处理成新的 tmp_img
,然后通过 imagecopyresized
函数处理。
由于我没有经验,所以我无法判断这是否是在不降低其质量的情况下调整 XY 尺寸图像大小的正确途径。我应该用 imagecopyresampled
替换 imagecreatetruecolor
和 imagecopyresized
吗?
imagecopyresized
and imagecopyresampled
具有相同的参数要求,因此您只需更改以下行中的函数名称即可:
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
其他一切都应该保持不变。
请注意,您的代码容易受到 SQL Injection. Read up on, and start using, prepared statements.
的攻击
我目前在基于 Pligg CMS 的网站上工作,其默认图像上传模块将缩略图附加到来自用户提供的链接的帖子,正在使用 PHP 的 GD 库进行图像处理。结果缩略图质量下降,经过一些网络搜索后,我发现我应该用 imagecopyresampled
.
imagecopyresized
函数
主要问题是我是web开发的菜鸟,不知从何下手。代码块我认为(因此可能是错误的)负责图像处理,需要编辑如下:
// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
while (file_exists("$thumb_dir/$name$i.jpg")) $i++;
$name = "$name$i.jpg";
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
if (!imagejpeg( $tmp_img, "$thumb_dir/$name",$settings['quality'] ))
$error .= "Can't create thumbnail $thumb_dir/$name";
else
$db->query("INSERT INTO ".table_prefix."files
SET file_size='$size',
file_orig_id='$orig_id',
file_user_id={$current_user->user_id},
file_link_id=$link_id,
file_ispicture=1,
file_comment_id='".$db->escape($_POST['comment'])."',
file_real_size='".filesize("$thumb_dir/$name")."',
file_name='".$db->escape($name)."'");
}
return $error;
据我所知,图像首先通过 imagecreatruecolor
函数处理成新的 tmp_img
,然后通过 imagecopyresized
函数处理。
由于我没有经验,所以我无法判断这是否是在不降低其质量的情况下调整 XY 尺寸图像大小的正确途径。我应该用 imagecopyresampled
替换 imagecreatetruecolor
和 imagecopyresized
吗?
imagecopyresized
and imagecopyresampled
具有相同的参数要求,因此您只需更改以下行中的函数名称即可:
imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );
其他一切都应该保持不变。
请注意,您的代码容易受到 SQL Injection. Read up on, and start using, prepared statements.
的攻击