kijin/imgtext

对于那些没有网络字体的我们

dev-master 2014-08-20 04:01 UTC

This package is not auto-updated.

Last update: 2024-09-24 04:14:30 UTC


README

IMGText 是一个 PHP 库,它为字符串中的每个单词生成一个 PNG 图像,然后生成 HTML 标记来显示这些图像,就像它们是文本一样。

此文档也提供韩语版本。

示例代码

$imgtext = new IMGText;
$imgtext->cache_url_prefix = '.';
$imgtext->cache_local_dir = dirname(__FILE__);
$imgtext->font_dir = '/usr/share/fonts/truetype/nanum';
$imgtext->font_name = 'NanumBrush';
$imgtext->font_size = 32;
$imgtext->color = '#404040';
$imgtext->shadow = true;
$imgtext->shadow_blur = 2;
echo $imgtext->get_html("네이버 ‘나눔손글씨 붓’으로 작성된 제목");

示例输出

네이버  ‘나눔손글씨  붓’으로  작성된  제목 

为什么使用 IMGText?

大多数情况下,网络上的西文字符很容易通过网络字体进行样式化。由于大多数西文字符系统只包含几十个符号,网络字体通常很小——只有几十 KB,因此下载速度很快。不幸的是,对于许多亚洲文字系统,如韩文、日文和中文(包括繁体和简体),情况并非如此。这些语言包含成千上万的符号,导致网络字体的大小达到几个 MB。

因此,许多亚洲网络设计师只能使用操作系统默认字体,或者求助于图片。(其他选项,如 <canvas>,很少使用,因为受影响的国家也存在着大量过时的浏览器。)前者看起来很糟糕,尤其是在标题中使用的大字体。另一方面,使用图片也有几个缺点

  • 每个图片都需要手动创建,并且很难在字体大小、颜色等方面长时间保持一致性。
  • 搜索引擎和屏幕阅读器无法访问原始文本,除非每个图片都有相应的 alt-text,这同样需要手动创建。
  • 当调整屏幕大小时,文本可以轻松重新排版,但图片只能进行缩放,导致布局破坏和/或在移动设备上可读性差。

IMGText 的目的是解决这些问题,不是通过解决问题的根源(缺乏适用于亚洲文字的网络字体),而是通过承认这一悲惨的现实,并在最大程度上自动化图片生成和网络应用集成。

  • 给定一个字符串、一个字体以及一些选项(如字体大小和颜色),IMGText 为字符串中的每个单词生成一个 PNG 图像,并生成 HTML 标记来显示它们,就像它们是文本一样。您只需将 HTML 标记放入您的页面中即可。
  • 由于每个单词都转换成了单独的图片,因此结果可以像普通文本一样轻松重新排版。(这仅适用于包含单词之间空格的文本。IMGText 优化了韩文。如果其他语言不包含空格,则可能无法正常工作。)
  • 您可以通过添加阴影并调整其位置、颜色和透明度来应用额外的样式。
  • 您可以通过使用具有 imgtext 类的 <img> 标签上的 CSS 和/或 JavaScript 来应用额外的样式。
  • 每张图片都配有相应的alt文本,使得搜索引擎和屏幕阅读器能够阅读结果。
  • 在Internet Explorer中的烦人悬停效果也得到了处理。
  • 每次您请求相同字符串和相同样式的相同字符串时,图像和HTML标记都会被缓存和重用。这使得IMGText非常快。

API参考

要使用IMGText,请将imgtext.php文件包含到您的项目中。您还需要

  • 至少一个包含所需所有符号的TTF字体文件。
  • 一个可由PHP写入的缓存目录。生成的PNG图像和元数据将存储在此目录中。此目录也应可供您的网站访客访问。

请参阅上面的示例以了解IMGText的工作概述。以下是可用方法、属性及其签名的列表

属性

  • 字符串 cache_url_prefix (必需):缓存目录的Web可访问路径。生成的HTML标记将包含对此目录的引用。不要包含尾随斜杠。例如:./images/cache

  • 字符串 cache_local_dir (必需):对应同一缓存目录的本地路径。生成的图像和元数据将存储在此目录中。不要包含尾随斜杠。例如:/srv/www/website_name/htdocs/images/cache

  • 字符串 font_dir (必需):存储字体的本地路径。不要包含尾随斜杠。例如:/usr/share/fonts

  • 字符串 font_ext (可选):字体文件的扩展名。默认值是ttf。如果您想使用OTF字体,请更改此值。此值区分大小写。

  • 字符串 font_name (必需):您想使用的字体文件名称。此值区分大小写。

  • 整数 font_size (可选):您想使用的字体大小,以磅为单位。默认值是32磅。

  • 整数 image_height (可选):生成的图像的高度,以像素为单位。您可以使用此参数强制指定特定高度。默认情况下,高度是自动确定的。

  • 十六进制 color (可选):文本的颜色,类似于CSS的十六进制表示,如#0000ff(蓝色)。也支持三位简写,如#f00(红色)。默认值是#000000(黑色)。

  • 十六进制 background_color (可选):背景颜色。语法与上面的$color相同。使用false表示透明背景。默认值是透明。

  • 数组 padding (可选):围绕每个图像的填充,以像素为单位。您的数组应包含4个整数。顺序与CSS相同,即顶部-右侧-底部-左侧。如果字体包含延伸到由IMGText生成的图像之外的符号,则填充可能很有用。在这种情况下,使用CSS的负边距来抵消额外的填充。默认值是无填充。

  • 布尔值 shadow (可选):将其更改为true以启用文本阴影。默认值是false

  • 十六进制 shadow_color (可选):文本阴影的颜色。语法与上面的$color相同。默认值是#000000(黑色)。

  • 整数 shadow_opacity (可选):文本阴影的不透明度。这应该是一个介于0到127之间的整数,其中0是完全不透明,127是完全透明。默认值是64,半透明。

  • 数组 shadow_offset (可选):文本阴影相对于文本的偏移量,以像素为单位。您的数组应包含2个整数:水平偏移和垂直偏移。使用正值以生成右侧和/或下方的阴影,使用负值以生成左侧和/或上方的阴影。默认值是(2, 2)。

  • 整数 shadow_blur (可选):文本阴影的模糊程度,以像素为单位。默认值是无模糊。

get_html()

参数

  • 字符串 $text (必需):您要显示的文本。

返回值:包含HTML标记的字符串。

  • 每个 <img> 标签将有一个类,imgtext。您可以为此类附加样式,或者使用 JavaScript 操作它。
  • <img> 标签之间将有一个空格字符(0x20)。如果单词之间存在多个空格,则只使用一个空格。同样适用于换行,因此在生成的 HTML 标记内目前无法有段落分隔。如果您需要段落,请考虑一次使用 IMGText 处理一个段落。
  • 由于浏览器根据父元素的字体大小来样式化图像之间的空格,它们可能对于您使用的 IMGText 字体来说太宽或太窄。使用额外的填充或 CSS 外边距来解决这个问题。
  • 在此字符串中不需要转义特殊字符,因为它们已经转义了。但是,如果您传递给 IMGText 的文本已经转义,则转义序列将被原样打印。
  • HTML 标记应插入到以 UTF-8 编码的页面中。

杂项信息

当在标题中使用时,IMGText 最有益。不建议用于正文文本,因为数百个小图像可能导致内容变得混乱。

当您使用 20 点以上的字体大小时,IMGText 工作效果最佳。如果您需要较小的字体,请考虑使用大字体(2 倍放大)生成 PNG 图像,并使用 CSS 高度调整它们的大小。这确保了平滑的外观,以及与高分辨率(所谓的 Retina)显示的兼容性。

IMGText 需要 PHP 5 和 GD。所有文本都必须以 UTF-8 编码。

IMGText 不包含任何字体文件。请自带 TTF 字体!

IMGText 在 MIT 许可下发布。它免费供个人、非营利性、商业、政府以及其他用途使用。