рд░реЗ: рд▓рд┐рдирдХреНрд╕-рдлреЛрдЯреЛрдЧреНрд░рд╛рдлрд░ рдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди

рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд▓реЗрдЦ " рд▓рд┐рдирдХреНрд╕ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлрд░ рдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди " рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЬрд╣рд╛рдВ рд▓реЗрдЦрдХ рд▓рд┐рдирдХреНрд╕ рдлреЛрдЯреЛрдЧреНрд░рд╛рдлрд░ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдордирд╛ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдорд╛рдирддрд╛ рдерд╛ред

рдкрд╣рд▓рд╛, рдпрд╛ рдмрд▓реНрдХрд┐, рд╢реВрдиреНрдп рдХрд╛рд░реНрдп, рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЕрдиреБрдХреВрд▓рди рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рдЕрдзреАрди рд╣реЛрдЧрд╛: рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдорд╕реА 5 рдореЗрдВ рдПрдл 5 рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдбреНрд░реЙрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдлреЛрдЯреЛ рдореИрдиреЗрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдбрд┐рдЬреАрдХреИрдоред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ - рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ: рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдВрджреЛрд▓рдиреЛрдВред рдПрдХ linuxoid рдлрд╝реЛрдЯреЛрдЧреНрд░рд╛рдлрд╝рд░ (рдпрд╛ рдмрд▓реНрдХрд┐, рдПрдХ linuxoid рдЬреЛ рдХрднреА-рдХрднреА рдлрд╝реЛрдЯреЛрдЧреНрд░рд╛рдлрд╝реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ) рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рдореЗрдореЛрд░реА рдХрд╛рд░реНрдб рд╕реЗ рдлрд╝реЛрдЯреЛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдзреНрдпрд╛рди рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдкрд░ рд░рдЦ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╢реВрдЯрд┐рдВрдЧ рдХреЗ рд╕рдордп рдФрд░, рдпрджрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдВрдЦ рд╕реЗ рдЬрд▓рди рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╣рдЯрд╛ рджреЗрдВред

рдПрдХ рдЕрдиреНрдп рдХрд╛рд░реНрдп рдЬреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рдлреЛрдЯреЛ рдФрд░ рдЙрдирдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдмреИрдЪ рдореЗрдВ рдХрдореА рд╣реИред рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ ImageMagick рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЗрдВрдЯрд░рдлреЗрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: рджреЛрдиреЛрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рдХрдиреНрд╡рд░реНрдЯ, рдореЛрдЧреНрд░рд┐рдлрд╝, рдореЙрдиреНрдЯреЗрдЬ рдкреНрд░реЛрдЧреНрд░рд╛рдо) рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИред рдореЛрддреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЫрд╡рд┐ :: Magick рдореЙрдбреНрдпреВрд▓ред ImageMagick рдЖрдкрдХреЛ рдлреЛрдЯреЛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдореИрдВрдиреЗ рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛:


рддрд╕реНрд╡реАрд░реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ:
#!/usr/bin/perl -wl use strict; use File::Find; use File::Path qw(make_path); use File::Copy; use Image::ExifTool qw(:Public); # You can change these variables my $PATH_SRC = '/media/NIKON/DCIM'; # path to memory card my $PATH_DST = $ENV{'HOME'} . '/photo'; # path to destination. Don't use ~ for your homedir my $PRECISION = 2; # 0 for year .. 5 for second my $MODE = 0644; # for chmod # Don't touch the rest of file find( \&wanted, $PATH_SRC ); sub wanted { return unless /\.jpg/i; my $new_name = lc $_; $new_name =~ s/^\D+//; my $info = ImageInfo( $File::Find::name ); my @date = split /\D+/, $info->{'DateTimeOriginal'}; $#date = $PRECISION; my $new_dir = join '/', $PATH_DST, @date; make_path $new_dir unless -d $new_dir; my $new_path = "$new_dir/$new_name"; -d $new_dir and move $File::Find::name, $new_path and chmod $MODE, $new_path and print "$File::Find::name => $new_path"; } # sub wanted 


рдХрдЯреМрддреА рдФрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░:
 #!/usr/bin/perl -w use strict; use Image::ExifTool ':Public'; use Image::Magick; use Getopt::Long; # Constants my %preferred_fonts = ( 'date' => [ qw/ DejaVuSans DejaVu-Sans Bitstream-Vera-Sans BitstreamVeraSans Verdana / ], # Normal width 'name' => [ qw/ DejaVuSansC DejaVu-Sans-Condensed Tahoma / ], # Narrow 'site' => [ qw/ DejaVuSansB BitstreamVeraSansB VerdanaB TahomaB / ], # Bold ); my $color = '#fff2'; my $gap = 10; my $name = (getpwuid $>)[6]; $name =~ s/,+$//; my $prefix = 'small.'; my $site = 'your-site.ru'; my $size = '50%'; # Override with options GetOptions( 'color:s' => \$color, 'gap:i' => \$gap, 'name:s' => \$name, 'prefix:s' => \$prefix, 'site:s' => \$site, 'size:s' => \$size, ); # Try to find suitable fonts my $image = new Image::Magick; my @available_fonts = $image->QueryFont(); my ( %seen, %fonts ); map { $seen{$_} = 1 } @available_fonts; while ( my ( $scope, $list ) = each %preferred_fonts ) { foreach ( @$list ) { $fonts{ $scope } = $_ and last if $seen{$_}; } # foreach } # while foreach my $file ( @ARGV ) { my $info = ImageInfo($file, 'CreateDate'); my $date = $$info{'CreateDate'}; my $new_file_name = $file; $new_file_name =~ s{([^/]+)$}{$prefix$1}; $date =~ s/^(\d{4}):(\d{2}):(\d{2}).*/$3.$2.$1/; my $p = new Image::Magick or next; $p->Read( $file ); $p->AutoOrient; $p->Resize( 'geometry' => $size, 'filter' => 'Lanczos', 'blur' => 0.5, ); my ( $width, $height ) = $p->Get('width', 'height'); my ( $x, $y ) = ( $width - $gap, $height - $gap ); $p->Set( 'pointsize' => 12, 'fill' => $color, ); $p->Annotate( 'font' => $fonts{'name'}, 'text' => $name, 'rotate' => -90, 'x' => $x, 'y' => $y, ); $y -= ( $p->QueryFontMetrics( 'font' => $fonts{'name'}, 'text' => $name, ) )[4] + $gap; $p->Annotate( 'font' => $fonts{'site'}, 'text' => $site, 'rotate' => -90, 'x' => $x, 'y' => $y, ); $y -= ( $p->QueryFontMetrics( 'font' => $fonts{'site'}, 'text' => $site, ) )[4] + $gap; $p->Annotate( 'font' => $fonts{'date'}, 'text' => $date, 'rotate' => -90, 'x' => $x, 'y' => $y, ); $p->Sharpen( 'radius' => 1, 'sigma' => 2, ); $p->Write($new_file_name); print "$file - $date\n"; } # foreach 


рдЙрдирдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдкреНрд░рд▓реЗрдЦрди github.com рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ:

Source: https://habr.com/ru/post/In128527/


All Articles