0

有没有可能使用imagefilter()功能使图像更清晰?我正在使用imagettftext()它为字体添加抗锯齿,字体看起来有点分散。我喜欢让我的最终图像锐化一点,这样我就可以减少图像中字符周围的模糊。

不同的测试图像

  • 使用的字体
    • Roboto-Thin.ttf
    • Roboto-Black.ttf

带有浅色字体的图像

我喜欢让我的字体看起来像旁边的那些线条。

在此处输入图像描述

带有深色字体的图像

在此处输入图像描述

带有 -$font_color 的图像(一些网络资源建议将字体颜色值设为负值,这基本上会关闭抗锯齿)但在这种情况下,字体看起来很难看。(Left-To-Right 100 关闭抗锯齿)

在此处输入图像描述

4

3 回答 3

3

imagefilter()中没有这样的过滤器(您确实尝试过IMG_FILTER_EDGEDETECT?对于尖锐的过渡,也许它可以为您带来一些东西)。但是您可以尝试使用imageconvolution

imageconvolution($imageResource, array(
    array( -1, -1, -1 ),
    array( -1, 16, -1 ),
    array( -1, -1, -1 ),
), 8, 0);

您可能想查看PHP imageconvolution() 在左上角留下黑点,似乎有问题imageconvolution

另一种可能性是在应用文本之前调整图像大小,使其(比如说)大 200%。然后再次使用大 200% 的字体应用文本。然后对图像进行下采样。根据字体特性,这将具有减少模糊的效果。使用 2 的整数幂(200%、400%、...)有助于减少伪影。

于 2012-10-25T23:53:32.973 回答
2

GD解决方案

$old = "old.png";
$new = "new.png";

$im = imagecreatefrompng($imgname);
imagetruecolortopalette($im, FALSE, 256);
imagecolorset($im, imagecolorclosest($im, 159, 159, 159), 0, 0, 0);
imagecolorset($im, imagecolorclosest($im, 191, 191, 191), 0, 0, 0);

imagepng($im, $new);
imagedestroy($im);

图像魔术解决方案

convert old.png -fuzz 0% -fill rgb(0,0,0) -opaque rgb(159,159,159) new.png
convert new.png -fuzz 0% -fill rgb(0,0,0) -opaque rgb(191,191,191) new.png


他们会输出

在此处输入图像描述 在此处输入图像描述

                  Old                           new
于 2012-10-25T23:39:21.887 回答
0

您正在使用 Roboto 字体的两个极端。选择浅色或普通版,它会变暗而不会太暗

字体渲染器的抗锯齿功能无法使细线的粗细小于 1 个像素,因此反而使它们变暗。

于 2012-10-30T21:36:41.393 回答