puppeteer-0-大背景:服务端:生成图片 合成海报 截屏

article/2025/8/21 23:17:09

背景

最近接手一个任务,大致要求就是可以动态合成图片。
没听懂?那我再解释下:

大致就是如上功能。

这个时候,会的,或者稍微会的,或者真的会的,就开会七嘴八舌了:吧唧吧唧....

前端的孩子开始发言了:这个不是很简单吗?使用canvas来合成图片不就可以了吗?

后端的孩子额头紧锁,半天不说话,似乎在酝酿什么!

过了半天,后端孩子开始说话了,canvas合成的,效果比较单一,要合成比较复杂的海报,能力有限!

前端的孩子开始不开心了:你会,那你说说看,怎么实现?

后端开始稳重的说话!

合成图片方案1:前端canvas

这种方案的优点,就是动作在前端就可以直接完成,但是缺点就是灵活性欠缺,针对部分比较多变的海报,或者特效比较好的广告,没办法把我们想要的效果简单的体现出来。另外一个缺点是兼容性比较差,对于客户端,尤其是iphone适配能力没那么强。所以这种方式只能针对部分比较简单的场景使用!

结论

pass

合成图片方案2:服务端jCharts

jCharts是一款基于Java的图表绘制类库,jCharts包含了多种图表格式,包括线型图、饼图、柱形图和点图等。

比如下面就是基于jCharts在服务端生成的图表:

它的官网是:jCharts官网

但是这种方式同样的适配能力有限,只能在图表方面大展拳脚,如果想生成其他的图片就无能为力了!

结论

pass

合成图片方案3:服务端gm

gm是GraphicsMagic的依赖包,可以进行丰富的图片处理。能力也非常强大,图片裁剪合成样样精通,基本上你能想象的到的功能都能实现。但是跟canvas一样,同样面临一个问题,那就是对于复杂的特效,实现能力有限。注意,特效,已经不是指对已有图片的处理了!而是指如何去无中生有实现好看的图片。

同时gm的使用依赖其他的软件:GraphicsMagic。这个软件同样需要安装。

所以同样会有平台的兼容性的问题。

GraphicsMagic 官网是: http://www.graphicsmagick.org/

结论

pass

合成图片方案4:服务端phantom

phantom是一个比较牛逼的库了。支持多种语言。

PhantomJS简介:
(1)一个基于webkit内核的无头浏览器,即没有UI界面,即它就是一个浏览器,只是其内的点击、翻页等人为相关操作需要程序设计实现。

(2)提供javascript API接口,即通过编写js程序可以直接与webkit内核交互,在此之上可以结合java语言等,通过java调用js等相关操作,从而解决了以前c/c++才能比较好的基于webkit开发优质采集器的限制。

(3)提供windows、linux、mac等不同os的安装使用包,也就是说可以在不同平台上二次开发采集项目或是自动项目测试等工作。

目前笔者这边使用过的有在python环境,有在node环境。

实现方式

phantom怎么实现图片合成呢!其实就是利用截图来实现的!

phantom的官网:https://phantomjs.org/

下面简单来介绍下如何利用phantom来截图:

在看下面内容之前建议先看完基础课

1、phantom截图方式1-截图在线网页:

var phantom = require('phantom');
let start = Date.now()
phantom.create().then(function(ph) {ph.createPage().then(function(page) {page.open("http://www.baidu.com").then(function(status) {// page.property('viewportSize', { width: 375, height: 667 });// 设置截图的大小page.render('./baidu.jpg').then(function() {console.log('Page rendered');ph.exit();console.log(Date.now() - start)});});});
});

2、phantom截图方式2-截图动态html字符串:

var phantom = require('phantom');
let start = Date.now()
phantom.create().then(function(ph) {ph.createPage().then(function(page) {page.property('content', '<html style="background-color: red"><h1>测试一下</h1></html>')// 设置html字符串page.render('./baidu.jpg').then(function () {console.log('Page rendered');ph.exit();});})
});

效果这边就不演示了。优点大家已经看到了,就是支持灵活多变的图片合成,所有的效果,可以实现通过html编排好。然后去截图,就可以了。但是比较致命的缺点是:合成的图片的清晰度非常低,如果对清晰度没有要求的倒是可以使用。另外一个缺点就是合成速度偏慢

因为是海报和广告制作,所以显然phantom也是不符合要求的

结论

pass

合成图片方案5:服务端puppeteer

Puppeteer 是 Chrome 开发团队在 2017 年发布的一个 Node.js 包,用来模拟 Chrome 浏览器的运行。相比于phantom而言,更推荐puppeteer(主要是因为 PhantomJs 坑太多了)。这边简单介绍下puppeteer的作用,后续会更新系列puppeteer的文章。puppeteer可以用来合成图片(实现原理也是截图,但是可以支持高清截图,而且截图速度快),可以用来做自动化测试等。下面引用其他的一些总结:

Puppeteer 是什么

Puppeteer 是 Node.js 工具引擎
Puppeteer 提供了一系列 API,通过 Chrome DevTools Protocol 协议控制 Chromium/Chrome 浏览器的行为
Puppeteer 默认情况下是以 headless 启动 Chrome 的,也可以通过参数控制启动有界面的 Chrome
Puppeteer 默认绑定最新的 Chromium 版本,也可以自己设置不同版本的绑定
Puppeteer 让我们不需要了解太多的底层 CDP 协议实现与浏览器的通信

 Puppeteer 能做什么

官方称:“Most things that you can do manually in the browser can be done using Puppeteer”,那么具体可以做些什么呢?
 
网页截图或者生成 PDF
爬取 SPA 或 SSR 网站
UI 自动化测试,模拟表单提交,键盘输入,点击等行为
捕获网站的时间线,帮助诊断性能问题
创建一个最新的自动化测试环境,使用最新的 js 和最新的 Chrome 浏览器运行测试用例
测试 Chrome 扩展程序

实现方式

puppeteer官网:https://github.com/puppeteer/puppeteer

puppeteer核心文档:https://github.com/puppeteer/puppeteer/blob/v5.5.0/docs/api.md#pagescreenshotoptions

下面简单分享下,puppeteer实现截图两种方式:

1、puppeteer截图方式1-截图在线网页

const puppeteer = require('puppeteer');
(async () => {let start = Date.now()const browser = await puppeteer.launch();const page = await browser.newPage();await page.emulate(puppeteer.devices['iPhone X']);// 使用iphonex模式来进行高分屏截图await page.goto("http://www.baidu.com");await page.screenshot({path: `./jd-${1}.png`,// 注意:png清晰度远胜于jpg});console.log(Date.now() - start)await browser.close();
})();

2、puppeteer截图方式2-截图动态html字符串

const puppeteer = require('puppeteer');
(async () => {let start = Date.now()const browser = await puppeteer.launch();const page = await browser.newPage();await page.emulate(puppeteer.devices['iPhone X']);await  page.setContent('<h1>测试下咯</h1>')await page.screenshot({path: `./jd-${1}.png`,// 注意:png清晰度远胜于jpg});console.log(Date.now() - start)await browser.close();
})();

效果,刚刚也说了,非常的赞!满足此次要求。

结论

通过!


http://chatgpt.dhexx.cn/article/ZHSkbAlB.shtml

相关文章

小程序多张图片合成海报分享功能

项目有个需求&#xff1a;代言人模块分享出去时。需要合成几张图片作为一张海报分享出去 需要用到canvas组件&#xff0c;组件的部分合成图需要下载下来&#xff0c;所以后端要配置好下载合法域名如下图&#xff0c;配置ok后开发者工具会看到合法域名 代码逻辑 1、点击分享弹框…

php生成推广二维码海报、合成图片demo

php生成推广二维码海报、合成图片 1、海报背景图。背景图一般存服务器,程序本地读取; 2、推广二维码。可以是二维码图片链接,也可以是字符串图像流。如果自己生成二维码,详见phpqrcode官网,地址:https://sourceforge.net/projects/phpqrcode。 3、开启PHP的GD扩展 inde…

微信小程序海报生成图片合成工具类

背景 我目前参与小程序的产品研发&#xff0c;为了方便产品的转发和推广&#xff0c;会对课提供生成海报转发或者分享的功能&#xff0c;前期海报合成这个功能是由项目组的老同事负责开发&#xff0c;后来小程序海报这块功能需要单独做一个功能用于专门根据不同的课程类型来生…

平面设计新手如何用PS制作出一张合成海报

本文由:“学设计上兔课网”原创,图片素材来自网络,仅供学习分享 平面设计新手如何用PS制作出一张合成海报?本期教程给大家制作一张关于VR战争合成海报,从合成海报来讲我们要做到以下几点: 创意部分:如何通过创意表现产品功能或其他想要表现的点, 有了创意找到合适的…

小程序画布合成二维码海报图,并保存到相册

小程序画布合成二维码海报图&#xff0c;并保存到相册 实现效果如下图&#xff1a; 步骤分析 1&#xff0c;先获取需要合成的海报和二维码。 2&#xff0c;获取图片的本地路径&#xff0c;如果图片不是网络连接则不需要此操作。 3&#xff0c;通过手机型号&#xff0c;根据…

拿来就用的Java海报生成器ImageCombiner(一)

背景 如果您是UI美工大师或者PS大牛&#xff0c;那本文一定不适合你&#xff1b;如果当您需要自己做一张海报时&#xff0c;可以立马有小伙伴帮您实现&#xff0c;那本文大概率也不适合你。但是&#xff0c;如果你跟我一样&#xff0c;遇上到以下场景&#xff0c;最近公司上了不…

ps海报合成教程_怎样合成创意环保海报图片的PS教程

效果图合成的非常不错&#xff0c;作者用虚实结合的方法来表现主题。创作的时候先构思好想要的画面&#xff0c;然后搜集相关素材(没有的素材可以想办法自己拍摄)&#xff0c;然后按自己思路溶图&#xff0c;润色即可。最终效果 一、拖入原素材&#xff0c;素材大家可以在网络上…

如何制作动态海报?教你一招在线合成GIF海报

相信大家在网上都见过静态海报吧&#xff01;那么&#xff0c;当我们想要将静态的海报制作成炫目的动态海报来吸引大众的目光的时候&#xff0c;应该如何在线制作GIF动态海报呢&#xff1f;这时候&#xff0c;大家就可以使用**gif制作**工具&#xff0c;上传图片一键就可以在线…

设计素材|这些创意海报合成,你会发现创意比技术更重要!

是不是各位也同样收到过这样的话&#xff1a;“这次的海报还是缺点创意啊”、“再改改&#xff0c;润润色”&#xff1b; 想创意熬了三天&#xff0c;海报改了无数版&#xff0c;结果领导还是不满意。 随着设计行业竞争的日益激烈 公司对设计师的水平要求越来越高 如果你是…

怎样合成gif海报?手把手教你一键制作动态海报

相信不少新媒体小编们&#xff0c;在工作中会遇到需要自己设计海报的情况。如果是设计一般的静态海报使用一些修图软件就可以制作&#xff0c;但是当我们需要将这些静态海报变成gif动图海报的时候&#xff0c;应该如何制作gif动态图片海报呢&#xff1f;接下来&#xff0c;小编…

PHP使用Grafika合成图片,生成海报图

需求背景&#xff1a; 在小程序上生成海报图&#xff0c;但在保存图片时&#xff0c;只能保存其中的小程序码图片&#xff0c;保存下来的图片过于单调&#xff0c;且无法确认该图片的作用性&#xff0c;所以需要调整为保存一整张海报图。 海报效果图&#xff1a; 需求分析&a…

合成海报的小程序插件-票圈海报

概述 票圈海报 是一个用于生成海报的小程序插件&#xff0c;通过灵活简单的配置(JSON)就可以生成精美的分享海报&#xff0c;适用于小程序的朋友圈分享等营销裂变场景。 可以绘制文字、图片、线条、色块到海报画布&#xff0c;支持设置宽高、透明度、层级甚至圆角等属性。 亮…

PHP 海报二维码合成

组合参数方法&#xff1a; /*** [user_qrcode 参数组合]* param [type] $bgImg [背景图]* param [type] $codeImg [二维码]* param string $name [名称]* param string $remask [备注]* param string $content [描述]* param integer $key [生成二维码名称…

vue两张图片合成一张(海报二维码合成工具)

公司要经常换海报&#xff0c;一个海报要不同的二维码&#xff0c;做一个工具解决一下。 效果图如下 二维码图片的位置和海报大小可以随意调整 直接放代码&#xff1a; <template><div class"all-tool"><div :style"bgStyle" class"…

【Web技术】961- 3分钟搞定海报合成

背景 在推广业务中&#xff0c;常常会遇到合成带二维码海报分享功能&#xff0c;并且为了推广力度&#xff0c;需要同时在APP、WEB、小程序都有此功能加大曝光&#xff0c;各端都需要单独编写&#xff0c;复用能力差&#xff0c;效率低。本身合成海报业务并无难度&#xff0c;在…

如何合成动态海报?手把手教你一键在线合成gif海报

相信大家在平时都见过那种gif动态海报图片吧&#xff01;是不是觉得只有专业的设计师才能制作呢&#xff1f;其实&#xff0c;这种gif动态海报制作起来非常的简单&#xff0c;只需要准备几张图片尺寸相同图文内容不同的图片&#xff0c;再使用**在线动画制作**工具&#xff0c;…

波束形成MATLAB代码

常规的波束形成方法 clc; clear; close all;fs 1000; c 150; N 128; f 100; lambda c / f; d 0.5 * lambda; theta 1: 1: 180; t (0:1:1000-1) / fs;A zeros(1, length(theta)); A(5) 5; A(20) 4; A(25) 5; A(50) 3; % 在这四个方向上有目标 S zeros(length(th…

相移波束形成算法的MATLAB仿真

仿真结果如下&#xff1a; 部分核心程序如下所示&#xff1a; %************************************************************************** % 相移波束形成算法 %************************************************************************** %…

【波束形成】MMSE波束形成,自适应MMSE波束形成以及自适应MBER波束形成

1.软件版本 matlab2013b 2.本算法理论知识 3.部分源码 clc; clear; close all; warning off;SNR_set [0:1:12]; BER 1; nRx 10; nTx 10; frame_length 1000; Bers []; %论文table 2 alpha [0,10,-15,30,-45,50,60,-5…

基于FPGA的波束形成verilog开发

目录 一、理论基础 二、核心程序 三、仿真测试结果 一、理论基础 根据原理可知&#xff0c;整个波束形成的基本结构框图如下图所示&#xff1a; 这里&#xff0c;我们使用的加权函数为&#xff1a; 这个模块&#xff0c;相当于上述结构的&#xff1a; 二、核心程序 timesca…