是否可以在HTML5中修改从Canvas中获取的图像的exif数据?

时间:2015-10-27 06:43:59

标签: javascript image-processing canvas html5-canvas dpi

我试图修改exif数据中图像的dpi标题。我知道它可以在原生iOS / Android场景中完成。但是有可能在Javascript中为从Canvas检索的图像做。请建议。感谢

2 个答案:

答案 0 :(得分:1)

是的,这是可以接受的,

  1. 您需要将画布转换为blob(文件)
  2. 您需要将blob转换为DataView
  3. 您需要在dataview中查找exif数据,并在dataview中查找exif标记位置 (偏移)
  4. 您需要通过dataView.setUint8替换dataview中的数据(offset, value,bigEndian);
  5. 将dataview转换为base64或image或blob
  6. Exif是二进制数据,因此,您将dpi转换为二进制并将其转换为dataview

    您可以使用或查看ExifRestorer.jsexif.js中的代码。 第一个链接用于插入exif数据,第二个链接用于解析exif数据

答案 1 :(得分:1)

piexifjs中尝试使用canvas样本。

  1. 获取exif二进制文件。
  2. 从画布中获取jpeg。
  3. 将exif二进制文件插入jpeg。

    // make exif data
    var zerothIfd = {};
    var exifIfd = {};
    var gpsIfd = {};
    zerothIfd[piexif.ImageIFD.Make] = "Maker Name";
    zerothIfd[piexif.ImageIFD.XResolution] = [777, 1];
    zerothIfd[piexif.ImageIFD.YResolution] = [777, 1];
    zerothIfd[piexif.ImageIFD.Software] = "Piexifjs";
    exifIfd[piexif.ExifIFD.DateTimeOriginal] = "2010:10:10 10:10:10";
    exifIfd[piexif.ExifIFD.LensMake] = "Lens Maker";
    exifIfd[piexif.ExifIFD.Sharpness] = 777;
    exifIfd[piexif.ExifIFD.LensSpecification] = [[1, 1], [1, 1], [1, 1], [1, 1]];
    gpsIfd[piexif.GPSIFD.GPSVersionID] = [7, 7, 7, 7];
    gpsIfd[piexif.GPSIFD.GPSDateStamp] = "1999:99:99 99:99:99";
    var exifObj = {"0th":zerothIfd, "Exif":exifIfd, "GPS":gpsIfd};
    
    // get exif binary as "string" type
    var exifBytes = piexif.dump(exifObj);
    
    // get JPEG image from canvas
    var jpegData = document.getElementById("canvas").toDataURL("image/jpeg", 1.0);
    
    // insert exif binary into JPEG binary(DataURL)
    var exifModified = piexif.insert(exifBytes, jpegData);