jimp-dev/jimp

Issue with photoshopped and edited images

Open

#977 建立於 2021年1月8日

在 GitHub 查看
 (0 留言) (0 反應) (0 負責人)JavaScript (785 fork)batch import
help wantedquestion

倉庫指標

Star
 (13,218 star)
PR 合併指標
 (30 天內沒有已合併 PR)

描述

Expected Behavior

This code was supposed to add a watermark to the image.

Current Behavior

With photoshopped or otherwise edited images it seems to break.

Failure Information (for bugs)

Error:

(node:10846) UnhandledPromiseRejectionWarning: Error: Could not find MIME for Buffer <null>
    at Jimp.parseBitmap (/Users/maxcampbell/Desktop/Youcon/backend/node_modules/@jimp/core/dist/utils/image-bitmap.js:187:15)
    at Jimp.parseBitmap (/Users/maxcampbell/Desktop/Youcon/backend/node_modules/@jimp/core/dist/index.js:431:32)
    at new Jimp (/Users/maxcampbell/Desktop/Youcon/backend/node_modules/@jimp/core/dist/index.js:384:13)
    at _construct (/Users/maxcampbell/Desktop/Youcon/backend/node_modules/@babel/runtime/helpers/construct.js:19:21)
    at /Users/maxcampbell/Desktop/Youcon/backend/node_modules/@jimp/core/dist/index.js:926:32
    at new Promise (<anonymous>)
    at Function.Jimp.read (/Users/maxcampbell/Desktop/Youcon/backend/node_modules/@jimp/core/dist/index.js:925:10)
    at /Users/maxcampbell/Desktop/Youcon/backend/recreate_jimp_error.js:11:18
    at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:63:3)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:10846) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:10846) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

Steps to Reproduce

  1. Create a new file test.js
  2. Put the code below in it.
  3. Put any photoshopped file in the same folder as test.js and name the image 'orig.png'
  var Jimp = require('Jimp')
const fs = require('fs')
const LOGO_MARGIN_PERCENTAGE = 5;

main = async() => {
    const LOGO = "https://upload.wikimedia.org/wikipedia/en/thumb/9/9f/Australian_Defence_Force_Academy_coat_of_arms.svg/1200px-Australian_Defence_Force_Academy_coat_of_arms.svg.png";
    fs.readFile('orig.png', 'utf8', async function(err, data) {
        if (err) throw err;
        const b64 = data.toString('base64')
        const [image, logo] = await Promise.all([
            Jimp.read(Buffer.from(b64, 'base64')),
            Jimp.read(LOGO)
        ]);

        logo.resize(image.bitmap.width / 2, Jimp.AUTO);

        const xMargin = (image.bitmap.width * LOGO_MARGIN_PERCENTAGE) / 100;
        const yMargin = (image.bitmap.width * LOGO_MARGIN_PERCENTAGE) / 100;

        const X = image.bitmap.width - logo.bitmap.width - xMargin;
        const Y = image.bitmap.height - logo.bitmap.height - yMargin;

        let compImage = image.composite(logo, X, Y, [{
            mode: Jimp.BLEND_SCREEN,
            opacitySource: 0.1,
            opacityDest: 1
        }]);

        compImage.getBase64(Jimp.AUTO, (err, buf) => {
            console.log(buf)
        })
    });

}

main()

Context

  • Jimp Version: 0.16.1
  • Operating System: macOS Catalina 10.15.4
  • Node version: 14.5.0

貢獻者指南