缩略图来自 GraphicsMagick 中流的 pdf 的第一页
Thumbnail the first page of a pdf from a stream in GraphicsMagick
如果我有 pdf 文件并且在本地 运行 gm
,我知道如何使用 GraphicsMagick 制作 pdf 第一页的缩略图。我只能这样做:
gm(pdfFileName + "[0]")
.background("white")
.flatten()
.resize(200, 200)
.write("output.jpg", (err, res) => {
if (err) console.log(err);
});
如果我有一个名为 doc.pdf
的文件,那么将 doc.pdf[0]
传递给 gm
效果很好。
但我的问题是我在 AWS Lambda 函数上生成缩略图,而 Lambda 将作为从源 S3 存储桶流式传输的输入数据。我的 lambda 的相关部分如下所示:
// Download the image from S3, transform, and upload to a different S3 bucket.
async.waterfall([
function download(next) {
s3.getObject({
Bucket: sourceBucket,
Key: sourceKey
},
next);
},
function transform(response, next) {
gm(response.Body).size(function(err, size) { // <--- gm USED HERE
.
.
.
一切正常,但对于多页 pdf,gm
正在从 pdf 的最后一页生成缩略图。如何在其中获取 [0]
?我没有在 gm documentation 中看到页面选择器,因为他们所有的示例都使用文件名,而不是流我相信应该有一个 API,但我没有找到一个。
(注意:[0]
非常重要,不仅因为多页 PDF 的最后一页有时是空白的,而且我注意到当 运行 gm
在命令行上有大pdfs,[0]
returns 非常快,而没有 [0]
扫描整个 pdf。在 AWS Lambda 上,快速完成以节省资源并避免超时非常重要!)
可以使用.selectFrame()
的方式,相当于直接在文件名中指定[0]
。
在您的代码中:
function transform(response, next) {
gm(response.Body)
.selectFrame(0) // <--- select the first page
.size(function(err, size) {
.
.
.
不要对函数的名称感到困惑。它不仅适用于 GIF 的 frames,而且适用于 PDF 的 pages。
在 GitHub 上检查此功能 source。
感谢 @BenFortune for his to similar 关于 GIF 的第一帧。我把它作为灵感并用 PDF 测试了这个解决方案,它确实有效。
希望对您有所帮助。
如果我有 pdf 文件并且在本地 运行 gm
,我知道如何使用 GraphicsMagick 制作 pdf 第一页的缩略图。我只能这样做:
gm(pdfFileName + "[0]")
.background("white")
.flatten()
.resize(200, 200)
.write("output.jpg", (err, res) => {
if (err) console.log(err);
});
如果我有一个名为 doc.pdf
的文件,那么将 doc.pdf[0]
传递给 gm
效果很好。
但我的问题是我在 AWS Lambda 函数上生成缩略图,而 Lambda 将作为从源 S3 存储桶流式传输的输入数据。我的 lambda 的相关部分如下所示:
// Download the image from S3, transform, and upload to a different S3 bucket.
async.waterfall([
function download(next) {
s3.getObject({
Bucket: sourceBucket,
Key: sourceKey
},
next);
},
function transform(response, next) {
gm(response.Body).size(function(err, size) { // <--- gm USED HERE
.
.
.
一切正常,但对于多页 pdf,gm
正在从 pdf 的最后一页生成缩略图。如何在其中获取 [0]
?我没有在 gm documentation 中看到页面选择器,因为他们所有的示例都使用文件名,而不是流我相信应该有一个 API,但我没有找到一个。
(注意:[0]
非常重要,不仅因为多页 PDF 的最后一页有时是空白的,而且我注意到当 运行 gm
在命令行上有大pdfs,[0]
returns 非常快,而没有 [0]
扫描整个 pdf。在 AWS Lambda 上,快速完成以节省资源并避免超时非常重要!)
可以使用.selectFrame()
的方式,相当于直接在文件名中指定[0]
。
在您的代码中:
function transform(response, next) {
gm(response.Body)
.selectFrame(0) // <--- select the first page
.size(function(err, size) {
.
.
.
不要对函数的名称感到困惑。它不仅适用于 GIF 的 frames,而且适用于 PDF 的 pages。
在 GitHub 上检查此功能 source。
感谢 @BenFortune for his
希望对您有所帮助。