lovell / lovell/sharp

Trim after extract fail: extract_area: bad extract area

Open
#2,103 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
JavaScript
Stars
32.7k
Forks
1.4k
Avg merge
1d 14h
Merged PRs (30d)
5

Description

What is the output of running `npx envinfo --binaries --languages --system --utilities`?
OS: macOS 10.15.1
CPU: (4) x64 Intel(R) Core(TM) i5-5250U CPU @ 1.60GHz
Memory: 153.41 MB / 8.00 GB
Shell: 5.7.1 - /bin/zsh
Binaries:
Node: 12.10.0 - /usr/local/bin/node
Yarn: 1.17.3 - /usr/local/bin/yarn
npm: 6.11.3 - /usr/local/bin/npm
Utilities:
Make: 3.81 - /usr/bin/make
GCC: 4.2.1 - /usr/bin/gcc
Git: 2.21.0 - /usr/bin/git
Clang: 1100.0.33.12 - /usr/bin/clang
Subversion: 1.10.4 - /usr/bin/svn
Languages:
Bash: 3.2.57 - /bin/bash
Elixir: 1.9.4 - /usr/local/bin/elixir
Java: 1.8.0_202 - /usr/bin/javac
Perl: 5.18.4 - /usr/bin/perl
PHP: 7.3.7 - /usr/local/bin/php
Python: 2.7.16 - /usr/bin/python
Python3: 3.7.6 - /usr/local/bin/python3
Ruby: 2.6.3 - /usr/bin/ruby

What are the steps to reproduce?
Use this code:
```
const sharp = require('sharp');

const imageStr = ',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';

async function process() {
let image = await sharp(new Buffer(imageStr, 'base64'))
.extract({ left: 49, top: 19, width: 13, height: 20 })
.trim() // Try to comment this line!
.png()
.toFile('/tmp/image.jpg');
}

process()
.then(() => console.log('ok'))
.catch((err) => console.log(err));
```

What is the expected behaviour?
`.trim()` should trim the bottom part of the extracted image. Right now, exception `extract_area: bad extract area` is thrown. If you comment the trim line, the char is extracted accordingly but the bottom part is not trimmed.

Are you able to provide a standalone code sample, without other dependencies, that demonstrates this problem?
See above

Are you able to provide a sample image that helps explain the problem?
See above

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The standalone Node.js sample is the entry point; run it with sharp and compare the pipeline with and without .trim(). Trace the extract/trim interaction, then verify completion by confirming the extracted image trims its bottom without raising extract_area: bad extract area.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, nodejs
Domain
computer-vision
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
62/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.