如何在邮件中嵌入图表?求PHP/Laravel相关解决方案
解决方案推荐
一、直接生成图片格式图表的PHP/Laravel库
1. PHPlot
纯PHP编写的开源免费图表库,依赖PHP的GD扩展(绝大多数服务器默认预装),支持柱状图、折线图、饼图、散点图等常用图表类型,可直接生成PNG、JPG格式图片。
- 优势:零成本、轻量、无需外部依赖,配置简单,适合小型项目快速落地需求。
- 简单示例:
require_once 'phplot.php'; $plot = new PHPlot(800, 600); $plot->SetImageBorderType('plain'); $plot->SetPlotType('bars'); $plot->SetDataValues([ ['周一', 120], ['周二', 180], ['周三', 150], ]); $plot->SetTitle('每日访问量'); // 保存到文件用于邮件嵌入,也可直接输出 $plot->SetOutputFile('daily_report.png'); $plot->DrawGraph();
Laravel中可封装成服务类,生成图片后通过邮件附件或Base64编码嵌入正文。
2. ChartPHP
开源免费的GD基图表库,支持多种图表类型,输出格式包含PNG,提供简洁API,易于集成到Laravel项目。
- 优势:文档友好,内置多种样式配置,无需复杂设置即可生成美观图表。
二、SVG转图片的PHP工具
若已用goat1000's svggraph生成SVG,可通过以下工具转成邮件兼容的图片格式:
1. Imagick扩展
服务器安装ImageMagick及对应PHP imagick 扩展后,可直接将SVG内容转换为PNG、WebP等格式,纯服务端处理,无需外部工具。
- 简单示例:
$svgContent = file_get_contents('generated_chart.svg'); $imagick = new Imagick(); $imagick->readImageBlob($svgContent); $imagick->setImageFormat('png'); $imagick->writeImage('chart.png'); $imagick->clear(); $imagick->destroy();
Laravel中可结合存储系统,将转换后的图片保存到本地或云存储,再嵌入邮件。
2. SVG-GD
纯PHP实现的SVG转GD资源库,无需任何外部扩展,将SVG解析后转换为GD支持的格式,最终可输出PNG、JPG。
- 优势:无需服务器额外配置,适合无法安装扩展的环境,开源免费、轻量易用。
内容的提问来源于stack exchange,提问作者PaulH
相关产品推荐
相关产品推荐

