用图像上传模块中的“imagecopyresampled”替换“imagecopyresized”功能

时间:2016-05-21 23:48:42

标签: php-gd pligg

我目前正在研究基于Pligg CMS的网站及其默认的图像上传模块,该模块将缩略图附加到用户提供的链接上,使用PHP的GD库进行图像处理。结果缩略图质量下降,经过一些网络搜索,我发现我应该用imagecopyresized替换imagecopyresampled函数。

主要问题是我是网络开发的新手,我不知道从哪里开始。代码块我认为(因此可能是错误的)负责图像处理,需要编辑如下:

// 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尺寸图像的正确途径。我应该用imagecreatetruecolor替换imagecopyresizedimagecopyresampled吗?

1 个答案:

答案 0 :(得分:0)

imagecopyresizedimagecopyresampled具有相同的参数要求,因此您只需更改以下行中的函数名称:

imagecopyresized( $tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height );

其他一切都应该保持不变。

请注意,您的代码容易受到SQL Injection的攻击。阅读并开始使用prepared statements