Crop Outline is not visible and renders below image
See original GitHub issueHello,
I have used react-image-crop for a long time. When I tried to use it in a different part of my app, I experienced an odd issue.
The crop outline is rendering invisible and below the image being loaded. Any idea why this might be happening?
constructor(props) {
super(props);
this.state = {
src: null,
crop: {
unit: "%",
width: 50,
aspect: 1
},
modalOpen: false
}
this.onCropChange = this.onCropChange.bind(this);
}
toggleCropperModal = () => {
this.setState({ modalOpen: !this.state.modalOpen})
}
onSelectFile = e => {
if (e.target.files && e.target.files.length > 0) {
const reader = new FileReader();
reader.addEventListener("load", () =>
this.setState({ src: reader.result, modalOpen: true })
);
reader.readAsDataURL(e.target.files[0]);
}
};
onImageLoaded = image => {
this.imageRef = image;
};
onCropChange = (crop, pixelCrop) => {
// You could also use percentCrop:
// this.setState({ crop: percentCrop });
this.setState({ crop, pixelCrop });
};
onCropComplete = () => {
this.makeClientCrop(this.state.crop, this.state.pixelCrop);
this.setState({ modalOpen: false})
};
async makeClientCrop(crop, pixelCrop) {
if (this.imageRef && crop.width && crop.height) {
const croppedImageUrl = await this.getCroppedImg(
this.imageRef,
pixelCrop,
"newFile.jpeg"
);
this.setState({ croppedImageUrl });
}
}
getCroppedImg(image, pixelCrop, fileName) {
const canvas = document.createElement("canvas");
canvas.width = pixelCrop.width;
canvas.height = pixelCrop.height;
const ctx = canvas.getContext("2d");
ctx.drawImage(
image,
pixelCrop.x,
pixelCrop.y,
pixelCrop.width,
pixelCrop.height,
0,
0,
pixelCrop.width,
pixelCrop.height
);
return new Promise((resolve, reject) => {
canvas.toBlob(blob => {
if (!blob) {
//reject(new Error('Canvas is empty'));
console.error("Canvas is empty");
return;
}
blob.name = fileName;
window.URL.revokeObjectURL(this.fileUrl);
this.fileUrl = window.URL.createObjectURL(blob);
resolve(this.fileUrl);
}, "image/jpeg");
});
}
<Section style={{display: 'inline-block'}} width='85%' marginBottom='35px'>
{src && <ReactCrop
imageStyle={{width: '100%', textAlign: 'center'}}
src={src}
crop={crop}
onImageLoaded={onImageLoaded}
onChange={onChange}
/>}
</Section>
If someone could point me in the right direction, that would be helpful!
Issue Analytics
- State:
- Created 4 years ago
- Comments:6 (2 by maintainers)
Top Results From Across the Web
My background image get cut off at the bottom - Stack Overflow
Pros: Full image is displayed. Cons: Image may be look stretched. And sometimes you will see empty space around the image.
Read more >How To Scale and Crop Images with CSS object-fit
In this example image, there is vertical space above and below the image because the declared height is taller than the scaled-down height....
Read more >Crop images in Photoshop Elements - Adobe Support
The Crop tool removes the part of an image surrounding the selection. Crop to remove distractive background elements and create a focus on ......
Read more >Customize an image | Jetpack Compose - Android Developers
Specify a contentScale option to crop or change how an image is scaled inside its bounds. By default, if you don't specify a...
Read more >Preventing Content Reflow From Lazy-Loaded Images
Reflow is a problem because it's a user-blocking operation. It slows down the browser by forcing it to recalculate the layout of any...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Ok solved it. I didn’t import the css. So the crop didn’t have styles. I’m assuming the guy is also having a css issue. Where it’s either getting overridden or not imported.
Yep, same problem. Just fixed.
import "react-image-crop/dist/ReactCrop.css";