HTML5 - 调整图像大小并将EXIF保留在已调整大小的图像中

Mar*_*rry 12 javascript html5 exif image-processing

如何调整图像大小(使用HTML5 canvas元素)并保留原始图像中的EXIF信息?我可以从原始图像中提取EXIF信息,但我不知道如何将其复制到已调整大小的图像.

这是我检索调整大小的图像数据以发送到服务器端代码的方法:

canvas.toDataURL("image/jpeg", 0.7);
Run Code Online (Sandbox Code Playgroud)

对于EXIF检索,我使用的是exif.js库.

Mar*_*rry 20

工作解决方案:ExifRestorer.js

使用HTML5图像调整大小:

function dataURItoBlob(dataURI) 
{
    var binary = atob(dataURI.split(',')[1]);
    var array = [];
    for(var i = 0; i < binary.length; i++) {
        array.push(binary.charCodeAt(i));
    }
    return new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
}
Run Code Online (Sandbox Code Playgroud)

主要代码,从此页面作为HTML5 resizer的一部分:https://github.com/josefrichter/resize/blob/master/public/preprocess.js(但略有修改)

var reader = new FileReader();

//reader.readAsArrayBuffer(file); //load data ... old version
reader.readAsDataURL(file);       //load data ... new version
reader.onload = function (event) {
// blob stuff
//var blob = new Blob([event.target.result]); // create blob... old version
var blob = dataURItoBlob(event.target.result); // create blob...new version
window.URL = window.URL || window.webkitURL;
var blobURL = window.URL.createObjectURL(blob); // and get it's URL

// helper Image object
var image = new Image();
image.src = blobURL;

image.onload = function() {

   // have to wait till it's loaded
   var resized = ResizeImage(image); // send it to canvas

   resized = ExifRestorer.restore(event.target.result, resized);  //<= EXIF  

   var newinput = document.createElement("input");
   newinput.type = 'hidden';
   newinput.name = 'html5_images[]';
   newinput.value = resized; // put result from canvas into new hidden input
   form.appendChild(newinput);
 };
};
Run Code Online (Sandbox Code Playgroud)

  • @KennyEvitt您可以根据需要使用代码.我创建它,我只是将不同代码的几个部分连接在一起. (3认同)
  • 你会为你的ExifRestorer.js文件创建一个GitHub仓库并添加一个许可证,以便其他人可以使用它吗?或者您是否明确说明其他人可能在此处使用您的答案中的代码的条款? (2认同)