2008年10月28日 星期二

關於這些PHP 函式

大部分的函式都已經被整理過 而且是我正在用的函式 當然 都被修改得比較簡潔 沒有太繁複的功能
有些函式被我寫到極為繁複 自己都搞不清楚哪個是哪個
要顯示 要儲存 要幹麻的一堆

到後來就越寫越簡單
譬如 就RGB轉CMYK 或是 CMYK轉RGB 還有必要去想說 1轉12 12轉1嗎
於是漸漸的就演變成 只剩兩個函式
而我貼出來的函式 其實反而是實驗性比較高
譬如 我又多寫了一段寫入不同檔名的功能

而不同的函式中
GD2 我用GD_開頭
imagick 我用IM_開頭
magickwand 我用MW_開頭
有些不需要這些DLL的 我就會用 NL_開頭
但是後面的名稱與參數欄位 我都會設定成一樣
如果大家對這些函式有任何指教 都歡迎討論

ColorSpace 一個看起來好像很有用 但是沒用的玩具

上一篇只講到 有關於JPEG如何判斷檔案的色域是RGB或是CMYK
如果 僅僅是為了顯示圖片在瀏覽器上 那篇就絲毫沒有用處
可是如果是用來做影像管理 圖庫這類的東西 那是大大的不足

印刷與顯示的需求差異很大
印刷要求的是 CMYK 300dpi
而顯示要求的是 RGB 72dpi
也許 在儲存上 還是要以 CMYK 300dpi來儲存 但是在網頁顯示上 卻需要 RGB 72dpi

所以 就必須要有 檢查色域與改變色域的功能
而這兩個功能都是imagemagick所擁有的

以下是每個色域的代號
ColorspaceType constants
0 MW_UndefinedColorspace
1 MW_RGBColorspace
2 MW_GRAYColorspace
3 MW_TransparentColorspace
4 MW_OHTAColorspace
5 MW_LABColorspace
6 MW_XYZColorspace
7 MW_YCbCrColorspace
8 MW_YCCColorspace
9 MW_YIQColorspace
10 MW_YPbPrColorspace
11 MW_YUVColorspace
12 MW_CMYKColorspace
13 MW_sRGBColorspace
14 MW_HSBColorspace
15 MW_HSLColorspace
16 MW_HWBColorspace

由於 PHP 5.2.6 之後就可以安裝 imagick 所以 我把同樣的功能寫成兩個不同的函式
一個是在 imagick 上使用 一個是在 magickwand 上使用

function IM_ColorSpace_Check($file){
$image=new Imagick($file);
$ColorspaceType = $image->getImageColorspace($file);
return $ColorspaceType;
}

imagick 傳回的是一個數值 例如 12 代表 CMYK

function MW_ColorSpace_Check($file){
$mgck_wnd = NewMagickWand();
MagickReadImage($mgck_wnd, $file);
$ColorspaceType = MagickGetImageColorspace($mgck_wnd);
return $ColorspaceType;
}

magickwand 傳回的是一個功能變數 例如 MW_CMYKColorspace 代表 CMYK 當然也就是 12

其實我個人發現 這16個色域 絕大部分是很少用到的 可卻也缺少一個 index color
這是GIF的格式

function IM_ColorSpace_Change($file, $ColorspaceType, $outputfile = False){
$image=new Imagick($file);
$image->setImageColorspace($ColorspaceType);
if ($output == False){
$image->writeImage($file);}
else{
$image->writeImage($outputfile);}
}

function MW_ColorSpace_Change($file, $ColorspaceType, $outputfile = False){
$mgck_wnd = NewMagickWand();
MagickReadImage($mgck_wnd, $file);
MagickSetImageColorspace($mgck_wnd, $ColorspaceType);
if ($outputfile == False){
MagickWriteImage($mgck_wnd);}
else{
MagickWriteImage($mgck_wnd, $outputfile);}
}

同樣的 一個是給 imagick 上使用 一個是給 magickwand 上使用

看起來是乎很方便 但是試過之後就會發現 這功能完全不能用
在網路上也幾乎沒有找到有這方面的範例
RGB的色域較廣 所以 可以轉換到CMYK的時候 有些顏色就會消失 某些圖片看起來會比較暗沉
而色域較小的CMYK 轉換到 RGB的時候 卻可以完全轉換
這個差異大家可以用Photoshop試試看就知道了
當然我不強求 RGB to CMYK的時候會有多漂亮
但是 CMYK to RGB 卻不能變化太多
可是 試驗下來 卻發現 通通會變色 而且差異蠻大的
這樣一來 還能用嗎
我知道 RGB to CMYK 的時候 先轉換為 index color 顏色掉得比較少
可是 卻沒有 index color 可以中介轉換
試了之後 我只能說 色域轉換個功能是玩具

2008年10月25日 星期六

Get Image ColorSpace CMYK or RGB

用過 ImageMagick的人都知道 ImageMagick 的功能比GD2 多很多
但是 如果在別人的伺服器上沒有安裝 ImageMagick 的時候要怎辦

我自己寫了一個個人相簿 主要是有些圖像整理起來需要用到特殊的功能
包括 300dpi的問題 cmyk的問題
當然這些東西 如果安裝了 ImageMagick 那一切好辦事
但是如果沒有呢

找了好幾天 才發現 其實 GD的 getimagesize 就有這樣的功能
當然 他僅限於 JPEG 其他的 TIFF 他根本就沒支援
但是這樣也夠了 因為 TIFF根本不能顯示在網頁上
而JPEG (CMYK) 也不能顯示在網頁上
那一但上傳了 JPEG (CMYK) 就需要做轉換
至於其他可以在網頁上顯示的 GIF 與PNG 都是RGB 根本也無須判別

先用以下的涵式看看 getimagesize 取得哪些資料

function CheckColorSpace($file){
$imagedata = getimagesize($file);
foreach ($imagedata as $val){
echo $val;
}
}

先整裡兩個JPEG檔 一個為RGB 一個為CMYK

分別呼叫這個涵式之後
會發現
-----------------RGB-------------------------
1600
1200
2
width="1600" height="1200"
8
3
image/jpeg
-----------------CMYK------------------------
1600
1200
2
width="1600" height="1200"
8
4
image/jpeg

Array[0] = Width
Array[1] = Height
Array[2] = Image Type Flag
Array[3] = width="xxx" height="xxx"
Array[bits] = bits
Array[channels] = channels
Array[mime] = mime-type

通常我們用到的 只是 第0 與第1個 索引 也就是寬與高
第2索引 是圖片類型的判斷
第3索引 則是以文字表現寬高
第4索引 每個像素用幾個bit表示
第5索引 如果為3 則表示 這個圖像由3個 channel組成 所以為RGB
如果為4 則表示 這個圖像由4個 channel組成 所以為CMYK
這個索引式JPEG特有的
第6索引 IMAGETYPE 可直接給 HTTP Content-type header使用

由此就可以判斷出 這個JPEG 是CMYK 還是RGB

function GD_CheckColorSpace($file){
$imagedatas = getimagesize($file,$imageinfo);
if ($imagedatas[2] != 2){
$CheckColor = "RGB";
}
else{
if ($imagedatas[channels] == 3){
$CheckColor = "RGB";
}
elseif ($imagedatas[channels] == 4){
$CheckColor = "CMYK";
}
}
return $CheckColor;
}

以下是 ImageMagick 判斷色域的涵式

function MW_CheckColorSpace($file){
$mgck_wnd = NewMagickWand();
MagickReadImage($mgck_wnd, $file);
$img_colspc = MagickGetImageColorspace($mgck_wnd);
//echo $img_colspc;
switch ($img_colspc){
case MW_CMYKColorspace :
return "CMYK";
break;
case MW_sRGBColorspace :
return "sRGB";
break;
case MW_RGBColorspace :
return "RGB";
break;
case MW_GRAYColorspace :
return "GRAY";
break;
case MW_LABColorspace :
return "LAB";
break;
//default:
}
}

兩者個功能差很多 當然 使用GD是不得已的作法

2008年10月21日 星期二

免費空間 - 700 megs.com

最近不知道發時麼神經 拼命找免費的空間
700 megs 被登在某網站顯著的位置
號稱 1.4G 的空間 7GB的頻寬
我心想 1.4G雖然不是很大 但是 有些東西是可以搬上去的
不然七早八早電話一來就必須開機給人抓資料 也是挺麻煩的
主要是電腦吵 又要吃電

我申請之後發現到幾個問題
當然 有些東西是我自己不懂 這些就略過 但是有些就很明顯 太扯了
1. PHP extension 竟然少了一大堆 包括 zip, exif 更不用說是 imagemagick
2. MySQL 使用者名稱 長度有限制 但是 不管你打多長 他卻也都接受 只是用的時候才告訴你是錯的
3. Addon的程式 我選了Gallery 竟然複製進我資料夾的檔案就不完全 更不用說裝得起來

我花了幾天的時間 將我的程式放上去 並且修改掉有使用到 imagemagick的部份 (後來發現是刪不清的 因為有些功能是GD2所沒有的) 把用到exif的 改成其他方法處理

放這套也不行 放那套也不對 反正吃這個也癢 吃那個也癢
到星期天 我終於放下了 我想 我還是找另一個空間好了
他在經歷過 將近五天時間
日期 2008年10月15日 下午 4:40 主旨 Your account data
日期 2008年10月20日 上午 4:11 主旨 account suspended

沒想到才一天沒進出 就被掃地出門了
Sorry 700megs cannot be used as a file storage device. We try to allow our users to host real websites with their accounts. If you would like to make a new account and create a website please feel free. This account will be suspended. Thank you for understanding

阿娘喂 相簿程式能沒有相片檔嗎 說我把它當儲存空間
再者 我當然是在我的電腦上改好再上傳 有人在線上改的嗎 應該很少

我不知道免費空間靠什麼獲利 既然免費你當然有權力砍我的東西
只是 有需要這麼摳嗎 怕熱就不要進廚房麻

2008年10月15日 星期三

該死的IIS+PHP

他奶奶的 IIS+PHP 這條路就像走在半夜墳墓裡一樣
不要問我為什麼半夜還要走在墳墓裡
也許墳墓裡有需要的東西
也許走過墳墓會看到需要的東西
也不是不願意閹掉IIS 改裝APACHE
只是原先有些ASP的程式不願意花時間改 就這麼將就將就
其實每次要寫新程式 總是頭皮發麻
如果只是程式 那可能可以在網海上找到一點頭緒
但是一但碰到設定的問題 那就頭大
絕大部分PHP Whiter都是在Linex下 掛著APACHE 所以相對上的討論多就很多
找資料的過程中 還看到有人大言不慚的說 我還不會用IIS
好像用 APACHE 就很高尚 用IIS就有罪

當然 我也知道 任何東西跟M$扯在一起 就有無盡的麻煩
不管是資料寫得不清不楚 還是隱晦不明 甚至是亂搞一通
過時的東西 她們永遠當不知道
當IIS7 出現的時候 好像IIS6跟牠們無關
其實不只是這家公司如此
PHP也漸漸的變成如此
舊有的設定 在更新之後變得怪怪的
他們可以說 為了提供更好的效能 更多的功能
我們必須把過去的東西砍掉一些

其實 每個人的邏輯都不一樣 需求也不同
設定起來 有人愛放C 有人愛放D
有人網站叫做A 有人網站叫做B
每個人總認為自己的設定就行 你的設定不行就是你錯了
我只能說 看到別人的設定 只能從中得到靈感 睡醒之後才知道究竟要怎搞

就像他奶奶的 ImageMagick
我用了好久的 ImageMagick 怎麼會裝了Gallery 2 之後才知道他要的不是這樣
但是 我找不到路上有人講到 這樣是不對的
可是 我還是用了好幾年阿 不管是縮骨 翻跟斗 烙印 還不是照樣完成

只能說
這些東西沒有絕對
不要告訴我 我的設定不對
基本上 我家電腦的主機板CPU 跟你家的應該是很難一樣的

2008年10月14日 星期二

養小孩需要多少錢

前幾天跟朋友談起要不要再生第二個
他的反應就是 你養得起就生阿
其實 這也是一般大眾的反應吧

以前有統計說養個小孩到20歲需要1000萬
然後大家就都信了
(其實社會上有很多似是而非的言論 聽聽就算了)

從知道有米妮到現在其實花的錢(不算健保費)
約略三萬五 但是在這三萬五裡面大概有一半以上是可以不用花的
怎說不用花呢
老婆生產要了一間單人房
米妮出生之後多住了五天
米妮住院為了方便要了一間單人房
這些都是可以省掉的開銷

出生到現在
一天四塊尿布(幫寶適約略8塊 但是我去買了一箱 平均6.2)
水費 一天5塊
電費 一天5塊(因為要再開盞小燈給他)
打疫苗 五合一 一次1100 打了三次 肺炎鏈球菌 3000
其他的買玩具

設備方面我幾乎沒買
譬如嬰兒床 嬰兒車 遊戲床 學步車

當然 接下來要上學繳學費
非要唸私立學校才有前途嗎
非要去學才藝才有前途嗎
我自己在父母的期待下去唸過私立學校 也學過鋼琴
但是 真的有什麼比別人更高一等嗎
根本就是放屁

有些藝人在電視上講 讓小孩去上什麼開發什麼的
其實真正有錢人的小孩注重的是人格體格的發展 而不是讓小孩子日夜操勞
像我這種沒錢的 只好自己敎

每天陪著米妮唱歌 看畫 有時候抓著他一起看電影
時間 ~~~~~ 其實這才是最主要的開銷吧

我不知道米妮喜歡什麼
所以 我花時間陪他 觀察他 把這世界介紹給他
這些時間都不是錢可以算出來的
唸公立學校也不是沒前途
不去上右腦開發也不見得右腦就會萎縮

媒體上那些似是而非的言論實在是太多了 不聽也罷
養個小孩要上千萬???台灣有多少人一輩子賺不到一千萬
那是不是就不要養小孩了
又不是古代治黃河 非要資金到位才能動工
非要賺滿一千萬才要生

2008年10月7日 星期二

先生威猛

一早看到油膩的瓦斯爐 ,喝著水都覺得油膩 ,抓起老婆指定要買的威猛先生,就開始噴 。
怪了,不是買了不刺鼻配方嗎 ?怎這麼刺鼻 ?那便宜的刺鼻配方呢 ?不就要戴防毒面具?

一直以來,廣告上對於廚房浴廁的表現都是差不多的,只是隔段時間就會出現所謂的「新配方」。

真的有新配方嗎?
是針對除污的新配方?還是對於味覺得新配方?
數百年來,廚房油垢的成分應該是差不多的。
我所謂的差不多就是說:反正都是可食用的成分,至於廢油去給卡車喝,那是另一回事。但是,油的主要結構還是差不多的,差別可能只有葡萄籽油、葵花油、西瓜油、香蕉油、芭樂油。
如果上個配方的除污力夠了,那還需要有增強除污力的新配方嗎?更快?更強?
我想家庭用的清潔劑不可能也不可以多強吧!

一邊刷著爐台上的油污,一邊回味一年多來老婆的廚藝,一邊細想著~~幹~~認識廣告10幾年了,到頭來還是被騙。
可是也不能說是被騙,因為老婆被那廣告「說服」了!
一直以來都不講 「匡」 「騙」而都在講的「廣告效果」,其實終究是用過才知道。

廠商通常會講,你家的油垢太久沒洗等云云。是!我承認很久沒洗了!
但是如果我是每天擦拭,我還會需要這類清潔劑嗎?屁

實在還是有些油污我不會洗,就是油煙機接油的那個小槽,摸起來像機油那樣,威猛先生還是沒力去解決。只好放著給老婆起床後再洗。

老婆看到之後的第一個反應就是「噴」!我跟他講沒用。但是老婆還是想試試看到底有多威猛。
老婆一邊用手劃動著那些油污,一邊讓威猛先生混合進去。搞到老婆都受不了,我也趕快抱著米妮出去透氣。

也許廠商有一天會看到我寫的這些。毀謗?算了吧。
如果廠商可以表列出怎樣的油污有多少的除污力,不要跟我講電視廣告上的那些效果畫面,那我就隨他。
如果廠商可以清楚的數據化刺鼻與不刺鼻的差別,那我也隨他。
廣告麻,看看就算了,不要太認真,又不是做廣告。還是趁手的東西比較好用。

2008年10月2日 星期四

賣巫婆的蘋果變成白雪公主

米妮回診
這醫生感覺還不錯 有生過小孩的樣子
對於小孩子的點點滴滴 使用的不是專業術語
其實這是我想要的

在早期 記得是剛滿月的時候 我曾經掛過他的號
只是那時候比較公式化的檢查 沒有太多的交流
之後 換了好幾個醫生 醫院的門診醫生都看過一半了
都不是很滿意
看到住院時候給我的診斷書 我開始覺得 我是不是該換醫院

每次去那家醫院 小兒科幾乎都沒人
出生率這麼低的醫院 可能除了打疫苗 沒人肯來吧
可能有些疫苗可能小診所拿不到或者存貨不足

後來固定了一個醫生 老婆覺得他還蠻用心的
當然 他也會主動跟你說 要不要幫你先掛號
所以 每次去的時候 這個醫生一大堆人
而另個醫生好像沒事幹一樣的在看書

颱風天的關係 原本掛星期一的就只好星期二去
當我們到醫院的時候已經10點半了
醫生也打算要閃了
看到我們 又回頭開門
聊一聊之後
他針對上星期的檢查中發現的問題跟我們做出解釋
也跟我們講 不要太擔心
到了九個月以後 應該會OK的
(鬼扯 明知道有問題 還要我們當父母的不要擔心
這不是2.5PPM的問題 而是0與0.000000000000000001的問題)

今天他的預約掛號只有兩個
又快要11點了 就開始聊了起來
不管是體重問題 不睡覺的問題 什麼鬼扯蛋的問題都聊開了
末了 他說 他開個抗組織胺的要給我們(希普利敏液 Cypromin)
我也順便要求他開Elomet cream

Elomet cream這種東西好用是好用 但是一擦見效 表示藥性很強
但是平時一但疏忽 穿太熱了 米妮全身馬上冒出痱子

抗組織胺??? 拿到藥以後 我才知道 之前某醫生就開過了
而這次他會再開的原因是 我跟他講 米妮吃了咳嗽糖漿沒什麼差別

其實他開藥的時候講了一堆 也不太記得了
只聽到 可以讓他胃口好一點 睡前給他一些 可以讓他好睡一點
因為這兩件事情才是我們最在乎的

回來開始給米妮吃了之後 ㄇㄉ
怎米妮老是昏昏沉沉的 連笑都不會笑了
當然還是有睡不著或不想睡的時候
但是全身沒力的

老實說 很不喜歡吃藥 我自己都是非到不行了才要吃藥的
但是還是要把這個處方吃完 5天