在我的Angular 6应用程序中,我创建了一个文件上传选项,在预览中,上传的文件需要显示自动裁剪和自动调整大小。
我尝试了以下方法,
HTML:
<canvas id="canvas"></canvas>
<div style="display:none;">
<img id="source" [src]="url" width="300" height="227">
</div>
<input type='file' (change)="onSelectFile($event)">
文件选择功能:
onSelectFile(event) {
if (event.target.files && event.target.files[0]) {
var reader = new FileReader();
reader.readAsDataURL(event.target.files[0]); // read file as data url
reader.onload = (event) => { // called once readAsDataURL is completed
this.url = event.target.result;
}
const canvas : any = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const image = document.getElementById('source');
ctx.drawImage(image, 33, 71, 104, 124, 21, 20, 87, 104);
}
}
在上面我已经尝试了以下链接https://jsfiddle.net/8jwq3cs7/的参考
const canvas : any = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const image = document.getElementById('source');
ctx.drawImage(image, 33, 71, 104, 124, 21, 20, 87, 104);
在使用画布之前,原始图像如下所示:https://mdn.mozillademos.org/files/5397/rhino.jpg
而使用canvas后,它是这样的:https://jsfiddle.net/8jwq3cs7/
但是如果我选择choose file
中的图像,那么我在选择后无法看到图像...
示例:https://stackblitz.com/edit/angular-file-upload-preview-uwpf8f
如果不是以Angular的方式,即使是纯JavaScript的解决方案也是值得赞赏的。
**要求是,**如果我选择一个文件,则需要在预览中自动裁剪相同的文件并适应大小...
请帮助我实现的结果没有jQuery或任何库..
6条答案
按热度按时间bcs8qyzn1#
这里有一个函数,可以在您上传时使用选择文件按钮获取图像
HTML将是
这是一个working fiddle
如果添加文件,预览图像将更新。你实际上得到了一个数据URL。使用数据URL将图像加载到画布上,然后对其进行裁剪。调用
drawimg(e.target.result)
参见工作小提琴:here
643ylb082#
以下是我在我的案例中如何实现的:
stackblitz的demo在这里:https://stackblitz.com/edit/angular-file-upload-preview-qrrgx5
希望它能有所帮助,这就是你想要的。
ie3xauqp3#
我在这个问题上有点晚了,但我昨天也遇到了一个非常类似的问题,但我使用的是NodeJS。
最后我的解决方案是将图像分解为RGBA值,并检查图像的每一行和每一列,以找到图像本身与BG相比的实际开始位置。
在我的例子中,我正在处理大约1500 px * 500 px的图像,我的解决方案需要大约150- 250 ms的时间来读取文件,分解其像素,计算裁剪位置并将裁剪后的文件写回磁盘。
由于我在网上找不到任何好的库来处理这个问题,我自己制作了一个库,并将它发布到NPM,以防其他人遇到同样的问题,需要一些帮助!:—)
https://www.npmjs.com/package/developyn-autocrop
ryhaxcpt4#
nwnhqdif5#
iqxoj9l96#
试试这个JavaScript代码。
源代码:Image Cropper
JavaScript