我正在缩小从200px宽到190px宽的图像,this class
这是我得到的alt text http://i40.tinypic.com/5as7eo.jpg
img 1 =原创 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - img 2 =较小
我尝试了几种不同的宽度但是我得到了与所有图像尺寸相同的锐度/模糊度损失。我的质量设置为100(最大)
答案 0 :(得分:5)
我找到了这个解决方案,它适用于我,我已经在我的Facebook墙上(https://www.facebook.com/antimatterstudios/posts/10151207306454364)
我今天在网上找到的一个不错的小提示(Facebook墙有直接链接),对于那些使用php的GD库来调整图像大小并发现图像大小和模糊的人,你可以使用这一小段代码来提高图像,它好多了
function imagesharpen( $image)
{
$matrix = array(
array(-1, -1, -1),
array(-1, 16, -1),
array(-1, -1, -1),
);
$divisor = array_sum(array_map('array_sum', $matrix));
$offset = 0;
imageconvolution($image, $matrix, $divisor, $offset);
return $image;
}
答案 1 :(得分:1)
您使用imagecopyresampled或imagecopyresized的方法是什么? imagecopyresampled可以提供更好的结果。如果可能,还要考虑Imagemagick库:http://pecl.php.net/package/imagick
答案 2 :(得分:0)
答案 3 :(得分:0)
只需将imagecopyresampled()
改为imagecopyresized()
就可以了。适合我。
答案 4 :(得分:0)
这是GD的双三次调整大小。它采用与标准ImageCopyResampled函数相同的参数。
它给出的结果要清晰得多,尤其是源分辨率接近目标分辨率时。
但是,当然,它比标准GD慢得多,ImageMagic显然可以提供更好的结果。
function ImageCopyResampledBicubic(&$dst_image, &$src_image, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) {
// we should first cut the piece we are interested in from the source
$src_img = ImageCreateTrueColor($src_w, $src_h);
imagecopy($src_img, $src_image, 0, 0, $src_x, $src_y, $src_w, $src_h);
// this one is used as temporary image
$dst_img = ImageCreateTrueColor($dst_w, $dst_h);
ImagePaletteCopy($dst_img, $src_img);
$rX = $src_w / $dst_w;
$rY = $src_h / $dst_h;
$w = 0;
for ($y = 0; $y < $dst_h; $y++) {
$ow = $w; $w = round(($y + 1) * $rY);
$t = 0;
for ($x = 0; $x < $dst_w; $x++) {
$r = $g = $b = 0; $a = 0;
$ot = $t; $t = round(($x + 1) * $rX);
for ($u = 0; $u < ($w - $ow); $u++) {
for ($p = 0; $p < ($t - $ot); $p++) {
$c = ImageColorsForIndex($src_img, ImageColorAt($src_img, $ot + $p, $ow + $u));
$r += $c['red'];
$g += $c['green'];
$b += $c['blue'];
$a++;
}
}
ImageSetPixel($dst_img, $x, $y, ImageColorClosest($dst_img, $r / $a, $g / $a, $b / $a));
}
}
// apply the temp image over the returned image and use the destination x,y coordinates
imagecopy($dst_image, $dst_img, $dst_x, $dst_y, 0, 0, $dst_w, $dst_h);
// we should return true since ImageCopyResampled/ImageCopyResized do it
return true;
}