Измените одно конкретное поле информации Exif файла изображения, используя piexifjs в Node.js - PullRequest
0 голосов
/ 16 мая 2018

Я разрабатываю веб-приложение с использованием Node.js, которое включает в себя некоторую обработку изображений. В моем приложении мне нужно изменить информацию Exif изображения (ориентация), только одно поле. И тогда я хочу, чтобы вся остальная информация осталась прежней. Я использую эту библиотеку .

Я использую этот код

var filename1 = "test.jpg";
                var filename2 = "out1.jpg";

                var jpeg = fs.readFileSync(filename1);
                var data = jpeg.toString("binary");

                var zeroth = {}; //exifData.image;//{};//exifData.image//{};
                var exif = {};
                var gps = {};

                zeroth[piexif.ImageIFD.Make] = "Make";
                zeroth[piexif.ImageIFD.XResolution] = [777, 1];
                zeroth[piexif.ImageIFD.YResolution] = [777, 1];
                zeroth[piexif.ImageIFD.Software] = "Piexifjs";
                exif[piexif.ExifIFD.DateTimeOriginal] = "2010:10:10 10:10:10";
                exif[piexif.ExifIFD.LensMake] = "LensMake";
                exif[piexif.ExifIFD.Sharpness] = 777;
                exif[piexif.ExifIFD.LensSpecification] = [[1, 1], [1, 1], [1, 1], [1, 1]];
                gps[piexif.GPSIFD.GPSVersionID] = [7, 7, 7, 7];
                gps[piexif.GPSIFD.GPSDateStamp] = "1999:99:99 99:99:99";
                var exifObj = {"0th":zeroth, "Exif":exif, "GPS":gps};
                var exifbytes = piexif.dump(exifObj);

                var newData = piexif.insert(exifbytes, data);
                var newJpeg = new Buffer(newData, "binary");
                fs.writeFileSync(filename2, newJpeg)

То, что делает код выше, создает новый файл и информацию Exif. Затем вставьте эту новую информацию Exif в новый файл изображения, но я не хочу, потому что я изменяю только одно поле. Я только хочу изменить ориентацию только и сохранить другие поля. Итак, я попытался сделать что-то вроде этого:

var filename1 = "test.jpg";
                var filename2 = "out1.jpg";

                var jpeg = fs.readFileSync(filename1);
                var data = jpeg.toString("binary");

                var zeroth = {}; //exifData.image;//{};//exifData.image//{};
                var exif = {};
                var gps = {};
                zeroth[piexif.ImageIFD.Orientation] = 1;

                var exifObj = {"0th":zeroth, "Exif":exif, "GPS":gps};
                var exifbytes = piexif.dump(exifObj);

                var newData = piexif.insert(exifbytes, data);

                fs.writeFileSync(filename2, newJpeg)

Но попытка не сработала. Итак, как я могу изменить только одно определенное поле (ориентация) и поддерживать другие поля данных Exif файла изображения, используя piexifjs?

...