4 ## @brief Display the contents of a .sim file
6 ## Usage: ./scripts/decode_sim <path to sim file>
9 ## Comment: <geeqie version file was created by>
10 ## Original image dimensions:
11 ## Exif Date Original:
13 ## Image of the thumbnail
22 my $file = shift or die;
24 open my $in_fh, '<', $file or die;
29 die unless $type eq 'SIMcache';
37 printf "Comment: %s\n", $1;
39 elsif (/^Dimensions=\[(\d+) x (\d+)\]$/)
41 printf "Original image dimensions: %dx%d\n", $1, $2;
43 elsif (/^Date=(\[-1\])/)
45 printf "Exif Date Original: %s\n", $1;
49 my $unix_time = substr($1, 1, 10);
51 my ($S, $M, $H, $d, $m, $Y) = localtime($unix_time);
54 my $date_time = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $Y, $m, $d, $H, $M, $S);
56 printf "Exif Date Original: %s %s\n", $1, $date_time;
58 elsif (/^Checksum=(.*)/)
60 printf "Checksum (never seen): %s\n", $1;
62 elsif (/^MD5sum=\[(.*)\]$/)
64 printf "MD5 sum: %s\n", $1;
66 elsif ($raw =~ /^SimilarityGrid\[(\d+) x (\d+)\]=(.*)$/s)
68 printf "Similarity image %dx%d\n", $1, $2;
69 if ($1 != 32 or $2 != 32)
71 print "Warning, similarity data are not size 32x32!\n";
74 my $simn = $1 * $2 * 3;
75 my ($width, $height) = ($1, $2);
78 $simdata = substr($simdata, 0, -1) if length($simdata) == $simn + 1; # In case all fits to one line
80 if (length($simdata) < $simn)
82 read $in_fh, $simdata, $simn - length($simdata), length($simdata) or die;
84 read $in_fh, $dummy, 1 or die;
87 printf "Warning, similarity data is not %d bytes", $simn unless length($simdata) == $simn;
89 if (length($simdata) == $simn)
91 my $gd = GD::Image->new($width, $height, 1);
93 for (my $x = 0; $x < $width; $x++)
95 for (my $y = 0; $y < $height; $y++)
97 my $colors = substr($simdata, ($x + $y * $width) * 3, 3);
98 my @rgb = unpack("CCC", $colors);
99 my $index = $gd->colorAllocate(@rgb);
100 $gd->setPixel($x, $y, $index);
102 } ## end for (my $x = 0; $x < $width; $...
105 open my $display_fh, '|-', qw(display -resize), sprintf("%dx%d", $width*10, $height*10), '-' or die;
107 print {$display_fh} $png;
109 } ## end if (length($simdata) == $simn)
110 } ## end elsif (/^SimilarityGrid\[(\d+)...
114 $field = $1 if /^(.*)=/;
116 printf "Unknown Field '$field'\n";
117 } ## end elsif (/^SimilarityGrid\[(\d+)...
118 } ## end while (<$in_fh>)