20260607 - login, add scene, add hotspot
This commit is contained in:
@@ -48,18 +48,30 @@ const degToDmsRational = (deg) => {
|
||||
*/
|
||||
const injectGPSCoordinates = async (filePath, lat, lng) => {
|
||||
try {
|
||||
const jpegBinary = fs.readFileSync(filePath).toString('binary');
|
||||
const data = fs.readFileSync(filePath);
|
||||
|
||||
let exifObj = { "0th": {}, "Exif": {}, "GPS": {} };
|
||||
// Kiểm tra marker SOI (Start of Image) trực tiếp trên Buffer
|
||||
if (data[0] !== 0xFF || data[1] !== 0xD8) {
|
||||
throw new Error("Tệp tin không phải là định dạng JPEG hợp lệ (thiếu SOI marker).");
|
||||
}
|
||||
|
||||
const jpegBinary = data.toString('binary');
|
||||
let exifObj;
|
||||
try {
|
||||
exifObj = piexif.load(jpegBinary);
|
||||
} catch (e) {
|
||||
// No existing EXIF, start clean
|
||||
// Nếu không có EXIF hoặc lỗi khi nạp, khởi tạo đối tượng sạch
|
||||
exifObj = { "0th": {}, "Exif": {}, "GPS": {} };
|
||||
}
|
||||
|
||||
// Đảm bảo các cấu trúc IFD tồn tại trước khi ghi đè
|
||||
exifObj["GPS"] = exifObj["GPS"] || {};
|
||||
|
||||
const latRef = lat >= 0 ? 'N' : 'S';
|
||||
const lngRef = lng >= 0 ? 'E' : 'W';
|
||||
|
||||
// Thêm Version ID (Bắt buộc để một số trình đọc nhận diện khối GPS)
|
||||
exifObj["GPS"][piexif.GPSIFD.GPSVersionID] = [2, 2, 0, 0];
|
||||
exifObj["GPS"][piexif.GPSIFD.GPSLatitudeRef] = latRef;
|
||||
exifObj["GPS"][piexif.GPSIFD.GPSLatitude] = degToDmsRational(lat);
|
||||
exifObj["GPS"][piexif.GPSIFD.GPSLongitudeRef] = lngRef;
|
||||
|
||||
Reference in New Issue
Block a user