kijin / imgtext
对于那些没有网络字体的我们
Requires
- php: >=5.0.0
- ext-gd: *
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 许可下发布。它免费供个人、非营利性、商业、政府以及其他用途使用。