使用 FPDF (PHP) 插入带有 alpha 通道的 PNG
Posted
技术标签:
【中文标题】使用 FPDF (PHP) 插入带有 alpha 通道的 PNG【英文标题】:Insert PNG with alpha channel using FPDF (PHP) 【发布时间】:2010-06-17 03:06:27 【问题描述】:在 FPDF 的官方文档中,它说 PNG 不支持 alpha 通道。
有什么解决办法吗?
【问题讨论】:
【参考方案1】:如果您需要将透明图像放在另一个图像之上:使用 php 内置函数将一个图像复制到另一个图像上。然后你会得到一张包含两张图片的新图片。另存为非 alpha png,然后插入。
有一个示例 here 需要组合图像的代码。
如果您希望文字在图片下方可见:先插入图片,然后将文字写入文档。
【讨论】:
【参考方案2】:试试这个 FPDF 扩展:
http://valentin.dasdeck.com/php/fpdf/fpdf_alpha/
页面的简短描述:
此脚本允许使用图像(PNG 或 JPG)带有 alpha 通道。这 可以提供 alpha 通道 作为单独的 8 位 PNG(“掩码”),或者, 对于 PNG,也是一个内部 可以使用 alpha 通道。为了 后者,GD 2.x 扩展是 必填。
指定一个单独的蒙版图像有 几个优点: - 不需要 GD。 - 更好的质量(完整的 8 位 alpha 通道,而 GD 仅在内部 支持 7 位 Alpha 通道) - 更快(必须提取嵌入式 alpha 通道 逐像素)
function Image(string file, float x, 浮动 y [, 浮动 w [, 浮动 h [, 字符串类型 [, 混合链接 [, boolean isMask [, int maskImg]]]]]])
与原始参数相同 Image() 方法,另外还有 2 个 (可选)参数: isMask: if 指定且为真,使用图像 作为其他图像的掩码。在这个 情况下,参数 x、y、w 和 h 将被忽略并且掩码图像 本身在页面上不可见。 maskImg:图像资源的数量(如 由先前调用的 Image() 返回 isMask 参数设置为 true) 将用作此掩码 图片。
函数 ImagePngWithAlpha(字符串 文件,浮动 x,浮动 y [,浮动 w [, float h [, 混合链接]]])
与原始参数相同 Image() 方法,但没有类型 参数。
【讨论】:
【参考方案3】:这对我有用,谢谢大家。我基本上包括了上面的扩展(http://valentin.dasdeck.com/php/fpdf/fpdf_alpha/),然后扩展类如下:
在 fpdf_tpl.php 中 要求('PDF_ImageAlpha.php');
class FPDF_TPL extends PDF_ImageAlpha
在 PDF_ImageAlpha.php 中:
class PDF_ImageAlpha extends FPDF
Inside of here I chaged the image() function to F_image() to avoid ***ing (probably should have used namespaces). With a quick search and replace you will see that this needs replacing 2 more times.
然后在我的 workhorse.php 文件中,我调用了函数 F_image() 而不是 image(),这解决了我的问题。
谢谢!!!
【讨论】:
以上是关于使用 FPDF (PHP) 插入带有 alpha 通道的 PNG的主要内容,如果未能解决你的问题,请参考以下文章
PHP FPDF 无法在 Chrome 中加载 PDF 文档