स्प्लिट कॉन्टेनेटेड टिफ फाइल


0

मेरे पास एक फाइल है जो एक साथ कई टिफ फाइलें समाप्‍त होती है। (ध्यान दें यह एक बहुविध टिफ नहीं है)। मैं फ़ाइल को अलग-अलग फ़ाइलों में वापस विभाजित करने का एक तरीका ढूंढ रहा हूं। अधिमानतः कमांड लाइन से ताकि प्रक्रिया को स्वचालित किया जा सके।

मैं इसे देखरेख कर सकता हूं लेकिन ऐसा प्रतीत होता है कि प्रत्येक छवि हेक्स मानों से शुरू होती है 49 49 2A। मैंने कुछ खोज की और AWK और SPLIT का उपयोग करके बाइनरी फ़ाइलों को विभाजित करने के लिए विभिन्न सुझावों की कोशिश की है, लेकिन मेरी स्थिति के लिए काम करने में कोई भी सक्षम नहीं है।

क्या कोई और तरीका है जिससे मैं इसे काम में ला सकूं?


संपादित करें: उत्तर में बदल गया
क्षितिज

जवाबों:


2

यदि आप सुनिश्चित हैं कि संक्षिप्त TIFFs सभी छोटी-एंडियन फाइलें (49 49 2A 00 मैजिक नंबर) हैं, तो यह पर्ल स्क्रिप्ट काम करना चाहिए। के रूप में आह्वान कियाperl foo.pl < file.tif

#!/usr/bin/env perl                                                         

my $big_endian = "MM\0*";
my $big_endian_regex = "MM\0\\*";
my $little_endian = "II*\0";
my $little_endian_regex = "II\\*\0";

my $tiff_magic = $little_endian;
my $tiff_magic_regex = $little_endian_regex;

my $n = 0;
my $fileprefix = "chunk";
my $buffer;

{ local $/ = undef; $buffer = <stdin>; }

my @images = split /${tiff_magic_regex}/, $buffer;

for my $image (@images) {
    next if $image eq '';
    my $file = sprintf("$fileprefix.%02d.tif", $n++);
    open FILE, ">", $file or die "open $file: ";
    print FILE $tiff_magic, $image or die "print $file: ";
    close FILE or die "close $file: ";
}

exit 0;

0

मुझे पता है कि TIFF फ़ाइलों के लिए, पहले 2 बाइट्स चार होते हैं और बाइट ऑर्डर (इंटेल या मोटरोला) के लिए ascii "II" या "MM" का मूल्यांकन करते हैं और फिर संस्करण के लिए 2 बाइट्स (शब्द) जो दशमलव 42 होना चाहिए (नहीं आतंक)।

उदाहरण के लिए देखें: http://www.fileformat.info/format/tiff/corion.htm

आपके उदाहरण में, आप II + 42 इंटेल बाइट ऑर्डर और संस्करण 42 देख रहे हैं।


यह समझ में आता है। अब मैं उस फ़ाइल को वास्तव में विभाजित करने के लिए कैसे उपयोग कर सकता हूं?
मैथ्यू

वह मेरे अनुभव से परे है। ऐसा करने का एक तरीका यह होगा कि फाइल को एक स्ट्रीम और बफर इनपुट के रूप में खोलें, बाइट अनुक्रम के लिए जाँच करें और फिर एक नई फ़ाइल का उत्सर्जन करें जब भी यह एक नया सामना करता है। यह सुरुचिपूर्ण नहीं है, लेकिन यदि कोई ऐसा करता है, तो एक बार में एक बाइट को पढ़ने के बजाय एक बार में बड़ी मात्रा में पढ़ने से सबसे अधिक गति मिलेगी। यूनिक्स यूटिलिटीज के बारे में मुझे जो भी पता है, वह बताता है कि AWK पाठ के लिए है, और शायद बाइनरी डेटा के लिए GAWK (?) जैसी उपयोगिता है
क्षितिज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.