• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
画像Hacks
 

画像Hacks

on

  • 13,758 views

YAPC::Asia 2011 by yusukebe

YAPC::Asia 2011 by yusukebe

Statistics

Views

Total Views
13,758
Views on SlideShare
11,811
Embed Views
1,947

Actions

Likes
12
Downloads
31
Comments
0

12 Embeds 1,947

http://yusukebe.com 1651
http://yapcasia.org 170
http://paper.li 87
http://a0.twimg.com 23
http://us-w1.rockmelt.com 5
http://b.hatena.ne.jp 3
http://tweetedtimes.com 2
http://t.co 2
http://hootsuite.com 1
http://127.0.0.1:4474 1
http://www.slideshare.net 1
http://cache.yahoofs.jp 1
More...

Accessibility

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    画像Hacks 画像Hacks Presentation Transcript

    • 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;
    • ...;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;...;
    • 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 );
    • ...;my $font = Imager::Font->new( file => HiraKakuPro-W3.ttf );...;
    • ...; 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 );...;
    • ...; 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; } }...;
    • 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 );
    • • – –• – –
    • •• – • – •• – • • •
    • 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
    • •• – –•• –• 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