Javascript lấy siêu dữ liệu từ hình ảnh

Chúng tôi có thể lưu trữ dữ liệu bổ sung bên trong hình ảnh, chẳng hạn như tọa độ định vị địa lý, chuỗi văn bản, v.v. Mặc dù có các ứng dụng GUI ưa thích để xử lý dữ liệu này, đôi khi chúng tôi cần xử lý nó trong Nút của chúng tôi. chương trình js. Ví dụ: nền tảng trình tạo trang web tĩnh, như AkashaCMS, có thể sử dụng siêu dữ liệu được lưu trữ trong hình ảnh, chẳng hạn như để tự động cung cấp chú thích hoặc văn bản chú giải công cụ. Những gì chúng ta sẽ làm trong hướng dẫn này là khám phá cách đọc siêu dữ liệu trong Node. js

Mục tiêu của chúng tôi trong bài viết này là tìm hiểu về cách truy cập siêu dữ liệu hình ảnh trong Nút. chương trình js

Chính xác thì siêu dữ liệu hình ảnh là gì? . Các pixel là phần trực quan của hình ảnh mà chúng ta nhìn thấy. Tuy nhiên, có các mục dữ liệu không trực quan khác có thể được đưa vào một hình ảnh. Phần lớn là dữ liệu về máy ảnh, độ phơi sáng và thậm chí cả vị trí địa lý, nhưng có thể đính kèm thông tin tùy ý

Một cách sử dụng khả thi là sắp xếp hình ảnh theo vị trí chúng được chụp. Hoặc, chúng tôi có thể lưu trữ các mô tả, chú thích hoặc các mục văn bản khác mà hệ thống quản lý nội dung sẽ hiển thị. Như chúng ta sẽ thấy có một danh sách dài các dữ liệu có thể lưu trữ trong hình ảnh

Lý do để truy cập dữ liệu này là chúng ta cần sử dụng nó để giúp thúc đẩy một ứng dụng, để hiển thị một số dữ liệu cho người dùng hoặc bất kỳ thứ gì khác. Tùy thuộc vào cách bạn sẽ sử dụng dữ liệu này, nhưng bước đầu tiên là biết cách truy xuất dữ liệu này. Vì có một số gói cho mục đích này, nên chúng tôi sẽ hiển thị các tập lệnh ví dụ nhỏ cho từng gói

Có một số định dạng siêu dữ liệu có sẵn

Định dạngCác loại hình ảnhMô tảEXIFJPEG, TIFFĐược phát triển bởi Hiệp hội Phát triển Công nghiệp Điện tử Nhật Bản [JEIDA] và chứa các trường về ngày và giờ, cài đặt máy ảnh, hình thu nhỏ, mô tả và bản quyền. Mô hình trao đổi thông tin IPTC [IIM]JPEG/Exif, TIFF, JPEG2000 hoặc Đồ họa mạng di động [PNG]Được phát triển bởi Hội đồng Viễn thông Báo chí Quốc tế [IPTC], để hỗ trợ trao đổi tin tức giữa các tổ chức tin tức quốc tế. Nền tảng siêu dữ liệu mở rộng [XMP]TIFF, JPEG, JPEG2000, PNG, GIF, MP3, MP4, MOV, PDF, WebPAn Tiêu chuẩn ISO do Adobe phát triển ban đầu và thay thế cho mô hình IPTC. Cấu trúc này được gọi là Khung mô tả tài nguyên và thường được đánh số thứ tự thành một tập hợp con của XML. Điều này có nghĩa là nó có thể lưu trữ bất kỳ dữ liệu nào, tuy nhiên các thẻ được sử dụng phổ biến nhất là từ Sáng kiến ​​siêu dữ liệu lõi Dublin

Điều đó tốt, và để tìm hiểu trong thực tế điều đó có nghĩa là gì, hãy mở một bức ảnh trong Gimp

Bức ảnh này được chụp vào tháng 7 năm 2013, trong cuộc chạy độ bền BC-BC lần thứ hai dành cho xe điện. Sự kiện BC-BC có một cuộc đua từ British Columbia đến Baja California, thể hiện khả năng di chuyển quãng đường dài của xe điện ngay cả trong năm 2013. Điều này có vẻ như là một điều phổ biến hiện nay khi một số nhà sản xuất xe điện đang cung cấp EV tầm xa, nhưng vào năm 2013, ý tưởng đó đã trở thành hiện thực rằng bất kỳ chiếc xe điện nào cũng có thể thực hiện một chuyến đi dài như vậy. Hàng tá ô tô trở lên đã tham gia và ngày nay loại chuyến đi này trở nên phổ biến nhờ sự gia tăng cơ sở hạ tầng sạc nhanh. Bức ảnh được chụp tại một đại lý xe hơi ở Redwood City, nơi từng là một trong nhiều điểm tham chiếu cho sự kiện. Nhưng tôi đã bị phân tâm

Vấn đề ở đây là - trong Gimp v2. 10 - bạn mở một tệp hình ảnh, sau đó trong menu Hình ảnh, bạn tìm thấy menu phụ Siêu dữ liệu, menu này có một lựa chọn là Chỉnh sửa Siêu dữ liệu và một lựa chọn khác là Xem nó. Hình ảnh này được chụp bằng Olympus E-PL2, một chiếc máy ảnh không gương lật micro-four-thirds mà tôi sở hữu vào thời điểm đó. Tôi đã cuộn xuống khu vực phơi sáng và tôi thấy rằng hình ảnh hơi bị dư sáng do độ lệch phơi sáng ở mức 0 EV. Bây giờ tôi biết rằng tốt hơn là đặt nó thành -2/3 EV, nhưng tôi lại bị phân tâm lần nữa. Điểm thực sự là có các giá trị EXIF ​​​​dành riêng cho Olympus và EXIF ​​​​chung. Giá trị ảnh. Điều này cũng có các tab dành cho dữ liệu XMP và IPTC, cả hai đều trống trong trường hợp này

Có gần một triệu ứng dụng GUI để chỉnh sửa dữ liệu EXIF, XMP và IPTC trong hình ảnh. Một số trong số họ cung cấp chỉnh sửa hàng loạt, nghĩa là đặt giá trị cho một nhóm ảnh cùng một lúc. Với những người khác, như Gimp, bạn chỉnh sửa một tệp hình ảnh tại một thời điểm

Có một số công cụ dòng lệnh mã nguồn mở, như

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
9,
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
0,
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
1 và
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2, có thể đọc và ghi không chỉ các giá trị EXIF, mà còn nhiều hơn thế nữa. Tôi sử dụng macOS và sử dụng MacPorts và bốn công cụ được cài đặt bằng lệnh này

$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG

Để sử dụng thêm, hãy xem thông tin trợ giúp tương ứng cho từng lệnh

Một công cụ liên quan là bộ ImageMagick. Đúng như tên gọi, đây là nhóm công cụ thực hiện ảo thuật bằng hình ảnh. Một trong những công cụ,

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
3, rất hữu ích để kiểm tra dữ liệu hình ảnh

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG

Những công cụ khác nhau này đang trình bày cùng một dữ liệu theo những cách khác nhau. Thật khó để chỉ ra một công cụ cụ thể tốt hơn những công cụ khác. Exiftool cung cấp một danh sách tùy chọn dài đến chóng mặt, nhưng phải trả giá bằng tài liệu dài và khó hiểu. May mắn thay, tài liệu về Exiv2 dễ hiểu hơn nhiều

Nhưng, đủ giới thiệu. Quan điểm của chúng tôi cho bài viết này là, làm cách nào để chúng tôi truy cập siêu dữ liệu hình ảnh trong một Nút. chương trình js?

Kế hoạch tấn công của chúng tôi là tìm kiếm sổ đăng ký npm để tìm các gói đọc siêu dữ liệu hình ảnh và có thể thay đổi dữ liệu đó và đưa chúng qua các bước của chúng

Chúng tôi sẽ tạo một số tập lệnh nhỏ, vì vậy hãy bắt đầu bằng cách tạo một thư mục dự án và khởi tạo

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
4

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y

Tất nhiên, đây là những gì chúng tôi làm cho mọi Nút. dự án js

Sử dụng
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
5 để đọc các thẻ EXIF ​​​​từ một hình ảnh

Đối với tập lệnh đầu tiên, hãy cài đặt gói

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
5

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities

Đây là một gói tương đối phổ biến và mục đích chính của nó là đọc dữ liệu EXIF ​​​​từ một hình ảnh

Theo tài liệu về trình phân tích cú pháp exif, chúng tôi cung cấp cho nó một Bộ đệm, gọi phương thức

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
7, sau đó chúng tôi được cung cấp một đối tượng có tên là
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
8. Điều đó đủ đơn giản.

Chúng tôi sẽ viết các tập lệnh đơn giản, sử dụng các mô-đun ES6 và sử dụng không đồng bộ cấp cao nhất, như được mô tả tại đây. Nút. js Người viết kịch bản. Async/await cấp cao nhất hiện có sẵn

Tạo một tệp có tên

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
9 chứa tệp này

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
5

Chúng tôi đọc tệp có tên trên dòng lệnh. Phương thức

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
50, nếu chúng ta không cung cấp
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
51, sẽ trả về một
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
52 chứa dữ liệu từ tệp. Đó chính xác là những gì chúng ta cần cho hàm
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
53. Điều tiếp theo chúng tôi làm là đảm bảo một vài tùy chọn được đặt, sau đó chúng tôi gọi
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
7 và cuối cùng là in các thẻ

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
1

Đây là phương pháp đơn giản và dễ sử dụng để đọc các thẻ EXIF. Vấn đề duy nhất tôi thấy là điều này bỏ lỡ rất nhiều dữ liệu mà Gimp đã hiển thị trên tệp này. Cụ thể, Gimp đã hiển thị một số lượng lớn các thẻ dành riêng cho Olympus, không có thẻ nào được hiển thị ở đây

Sử dụng
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
55 để đọc siêu dữ liệu hình ảnh

Hãy chuyển sang gói tiếp theo,

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
55. Cái này hỗ trợ nhiều loại hình ảnh và nó cũng hỗ trợ siêu dữ liệu Exif, IPTC, XMP, ICC và MPF. Đây có thể là một lựa chọn rất tốt

Cài đặt

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
4

Trang tài liệu cho biết chúng tôi có thể tạo mô-đun tùy chỉnh nếu chúng tôi muốn một phiên bản giới hạn của gói để hỗ trợ các nhu cầu hạn chế. Cài đặt theo cách này hỗ trợ mọi loại tệp và loại siêu dữ liệu.

Bây giờ hãy tạo một tệp có tên

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
57 chứa

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
6

Có một đối tượng tùy chọn và trong trường hợp này, chúng tôi đang đặt mọi tùy chọn được ghi lại

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
7

Đối tượng được trả về có năm trường.

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
58, mô tả tệp,
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
59, chứa hình thu nhỏ,
$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
9, chứa dữ liệu EXIF,
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
11, chứa dữ liệu IPTC và
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
12, chứa dữ liệu XMP. Nó được trình bày dưới dạng cấu trúc dữ liệu đẹp, dễ hiểu

Sử dụng
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
13 để đọc siêu dữ liệu hình ảnh

Có hai nút. js bao quanh chương trình

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2,
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2 và
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
16, có vẻ như chúng không phải là lựa chọn tốt. Thay vào đó,
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
13 trông giống như một trình bao bọc tốt hơn nhiều xung quanh
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2

Điều đang xảy ra là

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2 là một tập lệnh Perl, có sẵn dưới dạng công cụ dòng lệnh thông thường. Các gói trình bao bọc này thực thi tập lệnh này trong nền thay vì triển khai phân tích cú pháp siêu dữ liệu trong Node. js. Điều làm cho
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
13 trở nên thú vị là API chất lượng tốt

$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
1

Trang web tài liệu cho biết gói này có thể làm gì. Cụ thể, nó có thể đọc một danh sách dài các mục siêu dữ liệu từ các tệp hình ảnh, trong đó các thẻ được hỗ trợ được lấy từ một thư viện lớn các hình ảnh mẫu. Trong một số trường hợp, tài liệu cũng giới thiệu bạn đến tài liệu

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2.

Một trang quan trọng để tham khảo là danh sách các Thẻ được hỗ trợ.

Bây giờ, hãy tạo một tệp có tên

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
42 chứa

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
0

Như đã nói trong các nhận xét, bạn có thể tạo một phiên bản

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2 tùy chỉnh bằng cách tự gọi hàm tạo
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
44

Gọi

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
45 đọc tệp hình ảnh được đặt tên một cách không đồng bộ và trả về một đối tượng
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
8. Chúng tôi cũng có thể sử dụng điều này để viết thẻ và hơn thế nữa

Gọi

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
47 là bắt buộc để tập lệnh thoát

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
1

Điều này in ra đối tượng trả lại. Một điều quan trọng cần lưu ý là đối tượng này không liệt kê các trường IPTC hoặc XMP, v.v. Điều đang xảy ra là hình ảnh tôi sử dụng ở đây không chứa các thẻ thuộc loại đó

Công cụ cơ bản,

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2, không hỗ trợ các loại siêu dữ liệu khác. Và tham khảo trang tài liệu Thẻ xác minh rằng nó sẽ đọc tất cả các thẻ được hỗ trợ bởi
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2

Sử dụng
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
60 để đọc siêu dữ liệu hình ảnh

Gói ImageMagick là một bộ công cụ toàn diện không chỉ để đọc siêu dữ liệu hình ảnh mà còn thực hiện tất cả các loại thao tác cắt và thái hạt lựu. Xem http. //www. phép thuật tưởng tượng. org/ để biết chi tiết về gói đó.

Gói hình ảnh cho Node. js là một trình bao bọc xung quanh các công cụ dòng lệnh. Để sử dụng gói này, trước tiên bạn phải cài đặt ImageMagick. May mắn thay, nó có sẵn, chẳng hạn như thông qua MacPorts hoặc HomeBrew trên macOS hoặc trong trình quản lý gói tiêu chuẩn cho các bản phân phối Linux.

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
2

Sau đó tạo một tệp có tên

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
61 chứa

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
3

Đầu tiên, gói này là sự trở lại của Node ngày xưa. js nơi mọi thứ đã được thực hiện với chức năng gọi lại. Một vấn đề lớn với gói này là nó đã không được cập nhật trong chín năm và do đó không biết gì về Promise và do đó chúng tôi không thể sử dụng

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
62 với gói này. Điều đó có nghĩa là chúng ta phải bao quanh nó bằng một trình bao bọc Promise như được hiển thị ở đây

Chúng tôi đang trình bày hai phương pháp để đọc siêu dữ liệu

Phương thức

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
63 gọi công cụ
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
3 CLI. Nó phân tích cú pháp đầu ra và trả về một đối tượng chứa dữ liệu

Theo tùy chọn, chúng ta có thể sử dụng phương thức

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
3, phương thức này cũng gọi công cụ
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
3 CLI, phân tích cú pháp đầu ra và trả về một đối tượng chứa dữ liệu. Hai đối tượng giống nhau nhưng khác nhau. Bạn có thể thích cái này hơn cái kia

Sử dụng
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
67 để đọc siêu dữ liệu hình ảnh

Sharp là một gói hiện đại để thao tác hình ảnh, có nguồn gốc từ JavaScript. Thay vì xoay quanh một công cụ dòng lệnh, bạn có một API JavaScript tuyệt vời để xử lý. Trong số nhiều phương pháp của nó là khả năng đọc siêu dữ liệu hình ảnh và thậm chí thay đổi siêu dữ liệu

Tài liệu đầy đủ. https. //sắc. hệ thống ống nước pixel. com/

Trang chủ gói. https. //www. npmjs. com/gói/sắc

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
4

Bởi vì điều này phụ thuộc vào thư viện mã gốc, libvips, nên nó sẽ tải xuống thư viện được biên dịch sẵn hoặc biên dịch thư viện, như một phần của giai đoạn

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
68

Tạo một tệp có tên

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
69 chứa

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
5

Sharp là một gói hiện đại sử dụng API biểu cảm. Điều này có nghĩa là hàm

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
67 trả về một đối tượng có các phương thức API hỗ trợ chuỗi hoạt động với nhau. Tất cả những gì chúng tôi quan tâm vào lúc này là siêu dữ liệu mà chúng tôi có được bằng phương pháp này

Điều này có vẻ đủ đơn giản, nhưng

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
6

Hóa ra các trường

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
9,
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
11 và
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
12 chứa dữ liệu thô, thay vì dữ liệu được phân tích cú pháp. đau. Đó là một đối tượng mờ đục mà từ đó chúng ta không thể truy cập vào các trường. Đây không phải là kết quả mong đợi và cũng không phù hợp với các tính năng khác trong Sharp

Nói cách khác, Sharp cũng bao gồm một phương pháp để thiết lập các trường siêu dữ liệu khi tạo một hình ảnh mới. Sử dụng các ví dụ trong tài liệu Sharp, hãy viết một kịch bản khác,

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
74

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
7

Ví dụ này nhập hình ảnh vào luồng xử lý Sharp, thêm dữ liệu Bản quyền vào EXIF ​​và xuất kết quả sang một tệp mới. Nhân tiện, đây là kiểu sử dụng Sharp điển hình mà bạn xây dựng một quy trình xử lý từ đầu vào đến đầu ra

Chúng ta có thể chạy ví dụ này như vậy

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
8

Tôi chụp bức ảnh này, vì vậy tôi xứng đáng có bản quyền. Sau đó chạy lệnh

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
9 trên cả tệp đầu vào và tệp đầu ra, bạn sẽ thấy tệp đầu ra hiện có danh sách này

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
9

Thật tuyệt vời khi chúng tôi có thể sửa đổi cài đặt EXIF ​​bằng Sharp. Tuy nhiên, sẽ không hợp lý nếu Sharp có khả năng hiển thị cấu trúc của các thẻ EXIF, IPTC và XMP?

Đặt giá trị siêu dữ liệu EXIF/IPTC/XMP

Điều này dẫn chúng ta đến một nhiệm vụ chung, không chỉ đọc các giá trị siêu dữ liệu mà còn sửa đổi chúng. Chúng tôi đã trình diễn một số phương pháp đọc giá trị siêu dữ liệu trong Node. js mà chúng ta có thể sử dụng để xây dựng chỉ mục hình ảnh dựa trên siêu dữ liệu. Tuy nhiên, để tạo một chỉ mục hữu ích, chúng ta cần đặt các giá trị siêu dữ liệu. Và trước khi xuất bản một hình ảnh trên Internet, chúng ta có nên đính kèm thông báo bản quyền của mình trong siêu dữ liệu không?

Hãy bắt đầu với các công cụ dòng lệnh. Trong bộ ImageMagick, có vẻ như phải có một câu thần chú sử dụng lệnh

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
76 hoặc
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
77 để đặt giá trị EXIF. Nhưng tôi đã không thể giải quyết vấn đề này. Thay vào đó, tôi thấy lệnh
$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2 đơn giản hơn

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
0

Cách hiệu quả nhất để thúc đẩy điều này từ một Nút. js sẽ sử dụng gói

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
79. Shelljs giúp bạn viết những gì thường được viết dưới dạng tập lệnh shell, nhưng tập lệnh dễ mang theo hơn để chúng chạy không thay đổi trên Windows [ví dụ]

Sau một số thử nghiệm, tôi đã kết thúc với đoạn script sau

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
1

Tập lệnh này thể hiện sự thay đổi và do đó dài dòng hơn so với thông thường

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
2

Xem qua tài liệu shelljs sẽ cung cấp cho bạn tất cả các loại ý tưởng về những việc cần làm.

Lưu ý rằng tập lệnh đang in đầu ra từ mỗi lệnh. Điều này có thể được thay đổi bằng cách tùy chỉnh này

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
3

Ví dụ: tập lệnh này có thể được cải thiện bằng cách sử dụng lệnh

$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
10 để sao chép tệp trước khi sửa đổi tệp. Một ý tưởng khác là sử dụng ứng dụng GUI để sàng lọc ban đầu, đặt thẻ EXIF ​​​​để đánh dấu bố cục của từng hình ảnh, sau đó truy vấn tập lệnh xem tệp nào có bộ thẻ EXIF/XMP/vv nhất định và thực hiện một hành động nhất định

Một công cụ tương tự là

$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
11 [ https. //npmjs. com/gói/zx].

Có rất nhiều thông tin chi tiết về siêu dữ liệu hình ảnh tại https. //exiftool. tổ chức/. Mặc dù lệnh

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
2 rất mạnh, nhưng nó để lại nhiều điều mong muốn về sự rõ ràng và dễ sử dụng. Trang dự án có điều này để nói.

Nếu bạn cảm thấy cần sử dụng "find" hoặc "awk" kết hợp với ExifTool, thì có thể bạn chưa khám phá hết sức mạnh của ExifTool

tôi thấy điều này khác. Việc mọi người chuyển sang các công cụ khác kết hợp với ExifTool thể hiện mong muốn có một giao diện người dùng khác. "Các công cụ cực kỳ tuyệt vời" phải luôn có "đường cong học tập dài"?

Một công cụ khác, Exiv2 [ https. // exiv2. tổ chức/chỉ mục. html], gần giống với ExifTool. Nó hỗ trợ các loại siêu dữ liệu giống như ExifTool và trang web của nó cũng có nhiều thông tin về siêu dữ liệu hình ảnh. Bởi vì nó được triển khai bằng C++ nên việc tích hợp vào các ứng dụng khác sẽ dễ dàng hơn. Công cụ dòng lệnh của nó dễ hiểu hơn. Ví dụ.

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
4

Điều này thể hiện việc đặt nhiều giá trị siêu dữ liệu, sử dụng cú pháp khá dễ hiểu. Cần có lệnh

$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
13 để bộ phận hỗ trợ XMP biết cách ghi lại
$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
14

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
5

Điều này in tất cả siêu dữ liệu

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
6

Tùy chọn

$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
15 là cách chúng tôi tìm kiếm siêu dữ liệu cho các giá trị cụ thể

Có một nút. js cho Exiv2, chúng tôi sẽ thảo luận ngắn gọn trong phần đề cập danh dự

Tước siêu dữ liệu hình ảnh

Một nhiệm vụ phổ biến khác là loại bỏ siêu dữ liệu để giảm thiểu mọi vấn đề về quyền riêng tư. Ví dụ: hình ảnh điện thoại di động của bạn thường có dữ liệu định vị địa lý. Đăng lên Facebook một ký hiệu hài hước mà bạn tìm thấy trong cửa hàng tạp hóa và bạn ngay lập tức thông báo cho bất kỳ ai kiểm tra hình ảnh về vĩ độ/kinh độ nơi bức ảnh được chụp. Loại thông tin đó sau đó có thể được sử dụng để chống lại bạn

Sử dụng ImageMagick, chúng ta có thể làm điều này

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
7

Kết quả là một JPEG hoàn toàn ổn, nhưng không có dữ liệu EXIF/XMP/v.v.

Sử dụng Exiv2, tùy chọn

$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
16 tương đương với lệnh
$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
17. Hoặc, bạn có thể sử dụng
$ sudo port install exif exiv2 exempi exiftool
...
$ exif /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiv2 pr /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exempi -x /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
$ exiftool -l /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
18 để nhắm mục tiêu các thẻ cụ thể cần xóa

Một sửa đổi đơn giản đối với tập lệnh

$ npm install exif-parser --save

+ exif-parser@0.1.12
added 1 package from 1 contributor and audited 1 package in 1.915s
found 0 vulnerabilities
74 được hiển thị trước đó có thể loại bỏ các thẻ siêu dữ liệu cụ thể. Ví dụ: các thẻ hiển thị loại máy ảnh hoặc độ phơi sáng không cấu thành mối lo ngại về quyền riêng tư, trong khi các thẻ định vị địa lý thì có. Sửa đổi tập lệnh đó để đặt các thẻ đó thành các giá trị trống sẽ thực hiện thủ thuật

đề cập danh dự

Trong quá trình nghiên cứu bài viết này, tôi đã tìm thấy một số công cụ đầy hứa hẹn nhưng không đủ hữu ích

Gói Exiv2 dành cho Nút. js giao diện với thư viện Exiv2 C++. Tài liệu hiển thị một API rất hay. Nhưng, nó chỉ tương thích với Node. js v0. 8. x và không tương thích với Node hiện tại. js.

Gói @11ways/exiv2 có thể là một nhánh rẽ cập nhật gói này cho Node hiện đại. js. Trên thực tế, nó cài đặt với Node. js 16. x trên macOS, nhưng in ra hàng triệu cảnh báo trong khi làm như vậy. Chương trình sau thành công trong việc đọc siêu dữ liệu hình ảnh.

$ mkdir image-metadata
$ cd image-metadata
$ npm init -y
8

Vì API ban đầu đã 7 năm tuổi nên nó không hỗ trợ Lời hứa, v.v. Có lẽ nhóm

$ identify -verbose /Volumes/david/media/2013-07-02-BC-BC/P7050342.JPG
00 đang làm việc với gói này và họ có một loạt cảnh báo cần giải quyết nếu không có gì khác

Gói Exifer dành cho Nút. js có vẻ đầy hứa hẹn. Để đọc các thẻ EXIF, IPTC hoặc XMP yêu cầu sử dụng các gói bổ trợ. Nhưng trong quá trình thử nghiệm, nó dường như không hoạt động chính xác.

Gói piexif dành cho Nút. js có vẻ đầy hứa hẹn. Mặc dù tài liệu gợi ý rằng nó có thể đọc siêu dữ liệu và cũng có thể chèn siêu dữ liệu, nhưng không hoàn toàn rõ ràng phải làm gì.

Tóm lược

Chúng tôi đã tìm hiểu về một loạt các công cụ để đọc và thao tác với siêu dữ liệu hình ảnh

Trạng thái của nút. hỗ trợ js cho khu vực này yếu. Mặc dù có một số gói hỗ trợ tốt cho việc đọc siêu dữ liệu hình ảnh, nhưng ngay khi bạn muốn thao tác [thêm, xóa hoặc thay đổi] siêu dữ liệu, bạn sẽ phải sử dụng các công cụ khác. Nhưng nếu mục tiêu của chúng tôi là cung cấp một Nút. js hoặc dịch vụ, chúng tôi không muốn

Sự lựa chọn tốt nhất của chúng tôi từ Node. js đang tích hợp với giao diện dòng lệnh Exiv2. Một bước bổ sung để khám phá là cập nhật Nút của nó. js để hỗ trợ Node hiện đại. phiên bản js

Một bước khác để khám phá là lấy gói Sharp để phân phối dữ liệu EXIF/IPTC/XMP được phân tích cú pháp. Sharp có lợi thế là thư viện thao tác hình ảnh có mục đích chung và nó có thể được sử dụng nguyên trạng để đặt giá trị siêu dữ liệu

Giới thiệu về tác giả]

David Herron. David Herron là một nhà văn và kỹ sư phần mềm tập trung vào việc sử dụng công nghệ một cách khôn ngoan. Anh đặc biệt quan tâm đến các công nghệ năng lượng sạch như năng lượng mặt trời, năng lượng gió và ô tô điện. David đã làm việc gần 30 năm ở Thung lũng Silicon về phần mềm từ hệ thống thư điện tử, truyền phát video, ngôn ngữ lập trình Java và đã xuất bản một số cuốn sách về Node. lập trình js và xe điện.

với một nút. js dựa trên dịch vụ REST, bạn có thể không sử dụng khung giao diện người dùng như React hoặc Vue không. js? . js bằng Sharp, không có trình duyệt headless nào xuất hiện

Làm cách nào để lấy dữ liệu EXIF ​​​​từ JavaScript hình ảnh?

Có một thư viện JavaScript tuyệt vời tên là exif-js có thể cho phép bạn dễ dàng cung cấp cho nó một hình ảnh và nó sẽ trích xuất thông tin cho bạn. Nếu hình ảnh đã có trên trang, bạn có thể sử dụng thư viện như thế này; . var my_image = document. getElementById["my_image"]; .

Làm cách nào tôi có thể xem chi tiết đầy đủ của một bức tranh?

Nếu bạn có một hình ảnh và bạn không thể xác định các chi tiết liên quan đến bản quyền [chẳng hạn như tác giả, tiêu đề hoặc nguồn], bạn có thể thử tìm kiếm hình ảnh ngược bằng Google Hình ảnh để tìm trích dẫn và thông tin nguồn của hình ảnh. Mở Google Images và nhấp vào biểu tượng máy ảnh

Công cụ nào trích xuất siêu dữ liệu từ hình ảnh?

PIE là một trình duyệt và trình xem ảnh độc đáo với các tính năng đổi tên tệp và siêu dữ liệu ảnh tinh tế. Nó trích xuất EXIF, XMP và IPTC từ các tệp JPG, TIF và RAW và cung cấp nó trong một giao diện thuận tiện và thân thiện.

Bạn có thể lấy dữ liệu EXIF ​​​​từ ảnh chụp màn hình không?

“Ảnh chụp màn hình thường không bao gồm cùng loại siêu dữ liệu nhạy cảm như máy ảnh. ” Đối với nhiều người dùng, thông tin Exif duy nhất mang lại cảm giác đặc biệt riêng tư là nơi ảnh của họ được chụp

Chủ Đề