extract_jpegs.pl 719 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #!/usr/bin/perl
  2. # Unpack two or more concatenated JPEG files.
  3. # See also:
  4. # https://stackoverflow.com/questions/4585527/detect-end-of-file-for-jpg-images
  5. use 5.014;
  6. use strict;
  7. use warnings;
  8. use Digest::MD5 qw(md5_hex);
  9. binmode(STDIN, ':raw');
  10. binmode(STDOUT, ':raw');
  11. my $data = do {
  12. local $/;
  13. <>;
  14. };
  15. #my @files = split(/\x{FF}\x{D8}/, $data);
  16. #my @files = split(/^\xFF\xD8/m, $data);
  17. my $count = 1;
  18. #$data = reverse($data);
  19. #foreach my $data (@files) {
  20. while ($data =~ /(\xFF\xD8.*?\xFF\xD9)/gs) {
  21. my $jpeg = $1;
  22. my $name = sprintf("file_%d %s.jpg", $count++, md5_hex($jpeg));
  23. open my $fh, '>:raw', $name
  24. or die "Can't open <<$name>>: $!";
  25. print $fh $jpeg;
  26. close $fh;
  27. }