Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

画像Hacks

15,270 views

Published on

YAPC::Asia 2011 by yusukebe

Published in: Technology, Art & Photos
  • Dating direct: ❶❶❶ http://bit.ly/2F7hN3u ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❤❤❤ http://bit.ly/2F7hN3u ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

画像Hacks

  1. 1. use strict;use warnings;use Imager;my $file = doya.jpg;my $image = Imager->new( file => $file ) or die Imager->errstr;$image = $image->scale( xpixels => 100 );$image->write( file => out.jpg ) or die $image->errstr;
  2. 2. ...;my $image = Imager->new( file => $file ) or die Imager->errstr;$image = $image->scale( xpixels => 100 );$image = $image->crop( height => 100 ); #$image->write( file => out.jpg ) or die $image->errstr;...;
  3. 3. sub get_map { my $gamma = shift; my @map = map { int( 0.5 + 255 * ( $_ / 255 )**$gamma ) } 0 .. 255; return @map;}$image->map( red => get_map(0.5), green => get_map(0.65), blue => get_map(0.8));my $waku = Imager->new( file => waku.png );$image->rubthrough( src => $waku );
  4. 4. ...;my $font = Imager::Font->new( file => HiraKakuPro-W3.ttf );...;
  5. 5. ...; my $qrcode = Imager::QRCode->new( size => 3, margin => 0, version => 1, level => M, casesensitive => 1, lightcolor => Imager::Color->new( 255, 255, 255 ), darkcolor => Imager::Color->new( 35, 54, 92 ), ); my $qr = $qrcode->plot( $text ); $qr = $qr->scale( xpixels => 90 ); $image = $image->paste( left => 590, top => 198, src => $qr );...;
  6. 6.
  7. 7. ...; my $diff = $org->difference( other => $numbers[$n] ); $diff = $diff->to_rgb8; my $count; for ( my $x = 0 ; $x < $width ; $x++ ) { for ( my $y = 0 ; $y < 38 ; $y++ ) { my $pixel = $diff->getpixel( x => $x, y => $y ); next unless $pixel; my $result = $pixel->rgba; $count++ if $result == 255; } }...;
  8. 8. use Imager;use Image::ObjectDetect;my $image = Imager->new->read( file => picture.jpg );my $cascade = ./haarcascade_frontalface_alt2.xml;my $detector = Image::ObjectDetect->new($cascade);my @faces = $detector->detect($file); #←my $purple_source = Imager->new->read(file => ./purple.png);my $aspect = 1.5;for my $face (@faces) { my $purple = $purple_source->scale( xpixels => $face->{width} / $aspect, ypixels => $face->{height} / $aspect, ); $image->rubthrough( tx => $face->{width} / $aspect / 2 + $face->{x}, ty => $face->{height} / $aspect + $face->{y}, src => $purple, );}$image->write( file => ./output.jpg );
  9. 9. • – –• – –
  10. 10. •• – • – •• – • • •
  11. 11. use Acme::Porn::JP;…;my $porn = Acme::Porn::JP->new;my $actress_list = $porn->actress();for my $actress ( @$actress_list ){ search("$query $actress”);}…;$ perl -MAcme::Porn::JP -e $p = Ace::Porn::JP->new; printscalar @{$p->actress};’4502
  12. 12. •• – –•• –• positive.dat [filename]  [#  of  objects]  [[x  y  width  height]  [...  2nd  object]  ...] images/01.jpg  1  140  100  45  45 nega%ve.dat images/neg-­‐01.jpg images/neg-­‐02.jpg

×