Tôi hiện đang làm việc trên một dự án yêu cầu tôi chia ảnh TIFF thành tệp có chứa tất cả các thẻ và tệp chứa tất cả dữ liệu hình ảnh và tạo lại hình ảnh TIFF từ các tệp này . Vấn đề duy nhất là có vẻ như LibTIFF không cung cấp cách nào dễ dàng để lấy tất cả các thẻ từ một hình ảnh. Tôi đã thử sử dụng TIFFGetTagListCount và sau đó TIFFGetField để lấy thẻ, nhưng điều này chỉ trả về một tập nhỏ các thẻ. Tôi đã bắt đầu lăn phiên bản của riêng mình, nhưng tôi chỉ muốn kiểm tra lại và chắc chắn rằng tôi không nhìn thấy một cái gì đó như thế này có vẻ như một tính năng khá rõ ràng mà nên được bao gồm trong thư viện.LibTIFF: Trích xuất tất cả các thẻ từ một hình ảnh TIFF
Trả lời
addingtags.html in the libtiff documentation chứa thông tin về cách xử lý thẻ không chuẩn (theo mặc định chúng bị bỏ qua). Có thể đó là vấn đề?
Thẻ không chuẩn không phải là vấn đề thực sự, vì các thẻ tiêu chuẩn đơn giản như TIFF_IMAGEWIDTH và TIFF_IMAGELENGTH dường như không được bao gồm trong số danh sách thẻ. Nó thực sự khá lạ. –
Bạn có thể sử dụng trường tif_dir
của hình ảnh. Nó là một struct với ít nhất các lĩnh vực sau:
td_customValueCount
chứa số 'tùy chỉnh' đếm thẻ,td_customValues
là danh sách cáctd_customValueCount
giá trị thẻ (lập chỉ mục từ 0), và là loạiTIFFTagValue *
.
Vì vậy, bạn sẽ có thể làm điều gì đó như thế này (trong thời trang thực sự của mã trực tuyến, đây là chưa được kiểm tra, tất nhiên!):
for (i=0; i < tiffimage->tif_dir->td_customValueCount; ++i) {
const TIFFFieldInfo *info = tiffimage->tif_dir->td_customValues[i].info;
const char *tagname = info->field_name();
/* process tag */
}
Xem TIFFDirectory Struct Reference. Hy vọng rằng sẽ giúp.
Tiện ích tiffdump (được giao với libtiff) hoàn thành điều này, nhưng nhìn vào mã, có vẻ như chúng hầu như đang làm việc quanh thư viện. Họ thực sự gọi số lseek
và read
để đọc thông tin thẻ.
này cũng có thể hữu ích: http://www.lfd.uci.edu/~gohlke/code/tifffile.py.html
In tất cả các thẻ với tifffile.py:
from tifffile import TiffFile
for page in TiffFile(path_to_file):
for tag in page.tags.values():
print tag.name, tag.code, tag.dtype, tag.count, tag.value
Dưới đây là đóng cửa, bạn có thể nhận được cho quét tất cả các thẻ:
#include "LibTIFF/tif_dir.h"
...
TIFFDirectory *td = &tif->tif_dir;
for (int fi = 0, nfi = tif->tif_nfields; nfi > 0; nfi--, fi++) {
const TIFFFieldInfo* fip = tif->tif_fieldinfo[fi];
// test if tag value is set
// (lifted directly form LibTiff _TIFFWriteDirectory)
if(fip->field_bit == FIELD_CUSTOM) {
int ci, is_set = FALSE;
for(ci = 0; ci < td->td_customValueCount; ci++)
is_set |= (td->td_customValues[ci].info == fip);
if(!is_set)
continue;
} else if(!TIFFFieldSet(tif, fip->field_bit))
continue;
// else: process the fip->field_tag
}
Lưu ý rằng bạn sẽ phải tính đến một số thẻ sẽ xuất hiện hai lần (phiên bản LONG và SHORT), nhưng chỉ một trong số này sẽ có giá trị. Loại chính xác để sử dụng có thể được tra cứu trong tiêu đề được bao gồm (cấu trúc TIFFDirectory).
Ngoài ra còn có các sản phẩm đánh bắt khác về cách đọc các thẻ, nhưng ít nhất điều này sẽ giúp bạn lặp lại tất cả các thẻ (các tiêu chuẩn). Xem tif_dirinfo.c cho con trỏ nếu bạn gặp khó khăn.
Cũng vì 'tif_dir.h' là một tiêu đề nội bộ (tức là không được thư viện dựng sẵn), bao gồm nó gây ra mọi vấn đề như định nghĩa lại, thiếu phụ thuộc, vv. –
@Anish Ramaswamy Không phải là tôi biết. Như đã nói, điều này được thiết kế ngược từ nguồn LibTIFF. Nếu bạn có vấn đề với định nghĩa lại, hãy thử cách ly nó trong đơn vị dịch thuật riêng biệt hoặc một thư viện nhỏ.Đối với thiếu từ chối. - khác bao gồm phải được thêm vào là tốt. IIRC, chỉ tiêu đề sẽ làm, không cần biên dịch bất kỳ .c từ thư viện. – user362515
Điều đó dường như không phù hợp. Tôi vẫn đang đi săn. Cảm ơn! –
- 1. Sử dụng LibTiff từ C# (để truy cập hình ảnh TIFF lát gạch)
- 2. Trích xuất tất cả hình ảnh từ HTML bằng cách sử dụng JAVA
- 3. Viết 10,12 bit tệp TIFF với LibTIFF C++
- 4. Hiển thị hình ảnh TIFF trong tất cả trình duyệt web
- 5. Trích xuất tất cả các từ giữa hai từ cụ thể trong một vector ký tự
- 6. Loại bỏ thẻ hình ảnh html và tất cả mọi thứ ở giữa từ một chuỗi
- 7. trích xuất các từ từ một tệp
- 8. Trích xuất dữ liệu HTML5 thuộc tính từ một thẻ
- 9. Trích xuất các đối tượng đã kết nối từ một hình ảnh trong Python
- 10. Trích xuất thẻ băm từ chuỗi
- 11. Trích xuất hình ảnh phụ từ một hình ảnh bằng cách sử dụng C#
- 12. trích xuất một hình ảnh kênh từ hình ảnh RGB với opencV
- 13. Xóa tất cả hình ảnh
- 14. Làm cách nào để trích xuất hình ảnh từ video?
- 15. Nhận tất cả các thẻ từ taggit
- 16. Trích xuất xương tay từ hình ảnh X quang
- 17. Trích xuất kích thước hình ảnh từ chuỗi Base64
- 18. Trích xuất * hình ảnh * có liên quan từ một trang web
- 19. trích xuất văn bản từ tex, xóa các thẻ latex
- 20. ipad - trích xuất hình ảnh từ ứng dụng?
- 21. Trích xuất hình ảnh bằng iTextSharp
- 22. Cố gắng trích xuất các giá trị pixel từ một hình ảnh PNG cụ thể
- 23. Trích xuất các khung đơn từ một ảnh động GIF thành canvas
- 24. Trích xuất mã từ ảnh chụp áo phông qua OCR
- 25. Trích xuất EXIF từ JPEG
- 26. Trích xuất hình ảnh và từ có tọa độ và kích thước từ PDF
- 27. Trích xuất tất cả các url bên trong một chuỗi trong Ruby
- 28. Nhận tất cả hình ảnh từ Chương trình WebPage | Java
- 29. Nhận tất cả hình ảnh url từ chuỗi
- 30. Trích xuất ảnh tài nguyên cục bộ từ Winforms Biểu mẫu/Nút/Thuộc tính hình ảnh
Ngoài sự tò mò, bạn có tìm thấy giải pháp cho vấn đề này không? –