SmileyHackathon#6 いってきた
SmileyHackathon#6に参加して、久しぶりに自分のコードをぶっつづけで書きましたっ。
・IRCで雑談するとのことで、MacbookTigerにLimeChatを入れようとするも入らず。
・→開始後2時間格闘するも、「MacbookTigerに乗せたLimeChatが起動しなくなった」というブログ記事を見つけて、あぁOSアップデートの弊害かな?とIRCは諦める。。
・最初の自己紹介の時に宣言した、『C言語で画像処理をするサンプルを動かそう』と思うも、参考にしようとブクマしてたサイトがなぜか落ちてた
・→駄目じゃん・・・と、GD@PHPで、なんとなく画像処理のコードを書くことにした。
・→動くところまで行きたかったけど、動かなかったので、LTはできませんでした。。この次はっ。
なんで動かなかったかは
・MAMP慣れてなかったので、パーミッションがよくわかんなかったです。。
・そして家にてWAMPで動かしてみたら、メモリオーバーですって。。
・→これはCで書き直したほうがいいかもしれん。。
・→今日のコードは徒労!?そ、そんな、、
・→でもメソッドの分け方はけっこううまくいった気がする?テストかいてないので、メモリの問題が大丈夫になっても、意図する動きをすんなりするかはわからないけど。。
ということで、[動かないコード]ですが。。今日の成果物として載せます。
Cで移植して、動いたらまた載せます。
<?php /* * Gyouretsu filter class * 20090822 mana * usage... * $f = new filter(); * $f->setRect(array(array(1,1,1),array(1,1,1),array(1,1,1))); * $f->setImgpath("/home/me/tmp/0908221848.png"); * header("Content-type:image/png"); * $f->getImage(); */ class filter { private $filter; private $imgpath; private $w; private $h; public function __construct(){ } /* @return bool */ public function setRect($arr){ if($this->checkRect($arr)===true){ $this->filter = $rect; return true; } return false; } /* is it 2D? * @return bool */ private function checkRect($arr){ if(!is_array($arr)){ return false; } foreach($arr as $line){ if(!is_array($line)){ return false; } foreach($line as $num){ if(!is_numeric($num)){ return false; } } } return true; } /* @return void */ public function setImgpath($imgpath){ $this->imgpath = $imgpath; list($this->w,$this->h) = getimagesize($imgpath); } /* @return string or binary */ public function getImage($savename = null){ $resource = $this->process($this->imgpath); imagepng($resource,$savename); } /* @return bool = success/failed */ private function process($imgpath){ $resource = $this->imageOpen($imgpath); $img_arr = $this->resource2arr($resource); $img_after_arr = img_arr; $filter = $this->filter; foreach($img_arr as $color=>$image){ foreach($image as $x => $line){ foreach($line as $y => $num){ $afterfilter = filter($num,$filter); $filter_w = count($afterfilter); $filter_h = count($afterfilter[0]); $x0 = round($filter_w / 2); $y0 = round($filter_h / 2); foreach($afterfilter as $f_x => $f_line){ foreach($f_line as $f_y => $f_num){ if(isset($img_after_arr[$color][$x+$f_x-$x0][$y+$f_y-$y0])){ $img_after_arr[$color][$x+$f_x-$x0][$y+$f_y-$y0] += $f_num; } } } } } } $this->round_arr($img_after_arr); $this->arr2resource($img_after_arr,@$resource); return true; } /* @param int(color), arr(filter); * @return arr(after filter) */ private function filter($color,$filter){ $ret = array(); foreach($filter as $line){ $ret_line = array(); foreach($line as $num){ $ret_line[] = $color * $num; } $ret[] = $ret_line; } return $ret; } /* @param $array resource2arr * @return $array resource2arr */ private function round_arr($arr){ $ret = array(); foreach($arr as $key=>$line){ $ret[$key] = array(); foreach($line as $keyval=>$num){ $ret[$key][$keyval] = round($num); } } return $ret; } /* @return resource * switch vir extention */ private function imageOpen($imgpath){ $split = split(".",$imgpath); $ext = $split[count($split)-1]; $ext = strtolower($ext); switch($ext){ case "jpg": case "jpeg": $ret = imagecreatefromjpeg($imgpath); break; case "gif": $ret = imagecreatefromgif($imgpath); break; case "png": $ret = imagecreatefrompng($imgpath); break; case "bmp": $ret = imagecreatefromwbmp($imgpath); break; default: $ret = imagecreate($this->w,$this->h); } return $ret; } /* @return array(r=>arr(arr,arr),g=>arr(arr,arr),b=>arr(arr,arr)) * img resource 2 array */ private function resource2arr($resource){ $r_array = array(); $g_array = array(); $b_array = array(); for($y=0; $y<$this->h; $y++){ for($x=0; $x<$this->w; $x++){ $pixel = imagecolorat($resource,$x,$y); $r = ($pixel >> 16) & 0xFF; $g = ($pixel >> 8 ) & 0xFF; $b = $pixel & 0xFF; $r_array[$x][$y] = $r; $g_array[$x][$y] = $g; $b_array[$x][$y] = $b; } } $ret = array("r"=>$r_array, "g"=>$g_array, "b"=>$b_array); return $ret; } /* @return bool * @param array(3D), 2nd param changes direct * array 2 img resource */ private function arr2resource($array,$resource){ $r_array = $array["r"]; $g_array = $array["g"]; $b_array = $array["b"]; for($y=0; $y<$this->h; $y++){ for($x=0; $x<$this->w; $x++){ $r = $r_array[$x][$y]; $g = $g_array[$x][$y]; $b = $b_array[$x][$y]; $color = ($r << 16) | ($g << 8) | $b; imagesetpixel($resource,$x,$y,$color); } } return true; } } $f = new filter(); $f->setRect(array(array(1,1,1),array(1,1,1),array(1,1,1))); $f->setImgpath("C:\\windowstare.jpg"); //header("Content-type:image/png"); $f->getImage(); ?>
にまーん
ライブ☆コン(ピュータ)が、ララ☆コンピュータに改めた日に2万ヒットいきました!
コメントや☆をくださった方以外、どんな方が見てくれているのか見当がつかないブログですが、ありがとうございます。
絵とかネタをあげた時はちょっとだけど、ソースコードをあげるとぐいーんとアクセスがある、謎のお客様層・・・。何を載せれば喜んでいただけるのか、わからない・・・。
ブクマも憧れるけど、まあ憧れるだけですw
これからもマイペースでコードを載せていくので、宜しくお願いします。
2万〜3万の野望としては、
C言語で、画像処理のソースを書いて載せたいなーと思っています。
どうでもいいこだわりなのですが
同じ絵を、別のリソース(概念含む)にあげるの、私はあまりやりたくないのです。
多分、自分が作ったものを、2つ以上の概念ツリーノードに属させたくないんだと思う。
だからはてなハイクの落書きを、このブログに載せるのもなあ、と思ってしまう。
ギークネタのネタイラストをハイクにいっぱい描いてますが、落書きレベルなので、ブログに貼るほどでもなく。
(自分の落書きに愛着を感じないのは、どうしたもんかと、自分でも思っています。。)
ハイク叩きの記事を結構見たんだけれど、
イラストのリソース作成の場としては貴重だと思う、
でも収益につながらなそうだから、どうなるんだろうなあ。。
人気が出て重くなるほど、サーバ増やして赤字になる。。
・・・ポイント買おうかな。。適当にアフィリエイトでもしようかな。。
セキュスペ受けるぞう
来年の春、セキュリティスペシャリスト受けます!
自分は脆弱ですが、コードと運用は脆弱にしたくないのでw
今日本屋で、いつものように(・・・)技術書のコーナーに行ったのですが
資格の参考書のところ見てるうちに、あぁーなんか燃えたいなぁーと思いました!
とりあえず秋の試験の問題と解答が発表されてから、参考書を買って勉強を始めようと思います。
前回(去年春)は午前は通ったので、今度は午後特訓だ。頑張ろう。
まさかまた受けると思わなくて、参考書全部売ってしまったorz
買い直そうー。
ブログタイトル変更しました
ブログ名同じ名前の漫画(←検索避け)の画像を求めて来る方が多すぎたので、ブログタイトルを変更しました。
#実は一巻だけしか読んでいません。。
パーミッションをひとにたとえてみる
ユーザ権限
- 所有者(右から三番目)
- 自分
- グループ(右から二番目)
- 仲良しグループ
- 一般ユーザ(一番右)
- 初めて会う人
各桁の8進数
- Read(4)
- 自分のことを話す。
- Write(2)
- CD、マンガの貸し借りをする。
- eXecute(1)
- 休日に遊びにいく。
右から4番目のビット
- setuidビット(4)
- 一般ユーザが所有者権限で実行できる。
- →赤裸々アルファブロガー。
- setgidビット(2)
- 一般ユーザがグループ権限で実行できる。
- →飲み会マスター。
- stickeyビット(1)
- 所有者、ディレクトリの所有者、rootしか、そのファイルを削除できない。
- →防弾チョッキ。
なので、
- 人見知りの人は
- 0770
- 非常に仲の良い人にはオープン(groupの7)だけど、初対面の人にはそっけない(otherの0)。
- ツンデレは
- 0710
- デレの人には、話聞かないし(groupのrが-)好きなCDも借りない(groupのwが-)けど、休日に遊びにいく(groupのxが立つ)。
- ヤンデレは
- 1076
- 近しい人のために(いろんな意味で)大事なものを失いかねない。(stickeyビット)
- 自分よりデレの人のために存在する。(ownerの0、groupの7)
- 一般ユーザが6なのは、普通の人に対しては普通の扱いだから。
例えたら理解できるよね!学習教材的な。
(と、恥ずかしい空想を真面目に誤魔化す。)