星期五, 8月 10, 2007
MSN Virus - 你覺得我該用這張照片嗎?
雖然有點奇怪,她為啥用英文?
但這還不怎麼讓我在意,因為我也常常做這種事....
###CONTINUE###
好~把檔案抓下來之後。咦?怎麼是 .exe 放在裡面............(汗)
-------該 不 會 是 病 毒 吧---------
她還很乖的在exe前面加上,用這個下載dn0323之類的名字。
以為這樣我們就會上當嗎??
不過,自從上次被丟了神奇訊息,叫我登入某網站之後。
我對msn的使用者們,深具信心阿
難怪每年會有這麼多的人,被騙、上當。
如果你不幸的因為滑鼠太靈敏,而把exe打開了。
那,請快上網抓combofix吧....
我不敢去嘗試,不過看起來像是熊喵的變種毒~
話說回來,她的暱稱寫著.... 「不要打開我傳的檔案」
真是令人哭笑不得。
星期五, 8月 03, 2007
漫畫下載器....
在今天大功告成,簡記幾個mistakes
分別是writing binary data, use ::http to get binary data with -channel specified, get http in background
##CONTINUE##
- Writing Binary Data: 平常都是使用 puts $channel "string" 寫入資料,但是當想寫入binary資料時,就必需要設定 fconfigure $channel -translation binary 來更正channel的設定
- http package: 其實想把http的data content寫到檔案中,也可以用set $channel [open ...]打開channel,然後使用 ::http::geturl $URL -channel $channel,將 content直接放到channel中。這個方法就不需要先改channel的translation了。
- fetch http in background: 基本上,一本漫畫都是近百頁的。如果一次抓一張,實在是.....有些慢。所以使用 ::http::geturl $URL -command Callbackfunction ,做到non-blocked http request with callback function。雖然每個檔案不是使用多分割下載,但是已經比之前好很多了。唯一的困難點在於參數的傳遞,因為callback function的參數是定死的。還好能從URL中parse圖片的名字。
package require http
frame .n1
label .n1.filetosave -text "Save to:"
entry .n1.folder -textvariable folder
button .n1.openfolder -text "openfolder" -command setfolder
button .n1.rename -text "rename" -command rename
pack .n1.filetosave .n1.folder .n1.openfolder .n1.rename -side left
frame .n2
label .n2.folderurl -text "folderurl:"
entry .n2.url -textvariable url
button .n2.download -text "download" -command download
button .n2.stop -text "stop" -command stop
pack .n2.folderurl .n2.url .n2.download .n2.stop -side left
label .debug -text ""
label .state -text "Idle"
pack .state .n1 .n2 .debug -side top -fill both
set folder "comic_temp"
set serverno 2
set url "http://dm.99770.com/Comic/618/25601/?v=1*s=2"
set pagenumber 5
# =================================================================
# get http://dm.99770.com/Comic/618/25601/?v=1*s=2
# find pattern:
# 1. picurl=""
# 2. http://.....love.js
# get *love.js
# find pattern: ServerList[]
proc setfolder {} {
global folder
set tfolder [tk_chooseDirectory ]
if {$tfolder!= ""} {
set folder $tfolder
}
}
proc httpcallback { file token } {
# upvar #0 $token state
set fn [open $file w]
fconfigure $fn -translation binary
puts $fn [::http::data $token]
close $fn
}
proc wget { url { file "NULL"} } {
if {$file=="NULL"} {
return [::http::data [::http::geturl $url]]
} else {
::http::geturl $url -command [list httpcallback $file]
}
}
proc stop {} {
if {[.state cget -text]=="Downloading"} {
.state configure -text "Stop"
}
}
proc download {} {
global serverno ,pagenumber
set url [.n2.url get ]
set server ""
set fd [.n1.folder get]
if {[file exists $fd]==0} {
file mkdir $fd
}
cd $fd
.debug configure -text ""
.state configure -text "Downloading"
regexp {s=(\d+)} $url tmp serverno
set data [wget $url]
regexp {http[^>]*love.js} $data matched
debug [format "%s%s" "love js:" $matched]
set lovejs [wget $matched]
set i 0
while {\
[regexp -indices -line {^ServerList\[\d\]=[^;]*;} $lovejs index] } {
incr i
set tt [string range $lovejs [lindex $index 0] [lindex $index 1]]
if {$i==$serverno} {
regexp {http.*/} $tt server
debug [format "server: %s" $server]
}
set lovejs [string range $lovejs [lindex $index 1] end]
}
set index [expr [string last "/" $url]+1]
set baseurl [string replace $url $index end]
set i 1
while {1} {
if {[.state cget -text]=="Stop"} {
return
}
set url [format "%s%d.htm" $baseurl $i]
set data [wget $url]
regexp {picurl=\"([^;]*)\"} $data pic pic2
regexp {datas=([^;]*)} $data tmp pagenumber
set url [format "%s%s" $server $pic2]
set pic [lindex [split $pic2 "/"] end]
wget $url [format "%.3d%s" $i [string range $pic end-3 end]]
if {$i>=$pagenumber} {
break
}
incr i
}
.state configure -text "Complete"
cd ..
}
proc rename {} {
cd [.n1.folder get]
set i 1
foreach {f} [glob -nocomplain *] {
file rename $f [format "%.3d%s" $i [string range $f end-3 end]]
incr i
}
cd ..
}
proc debug { err } {
.debug configure -text [format "%s\n%s" [.debug cget -text] $err]
}
星期日, 7月 29, 2007
星期日, 7月 22, 2007
Blogger Hack
擴充了很多blog功能喔, 而且目前已經寫成了plugin的型式。
大家一起來擴充blogger吧~ 許多有用的功能....如下
##CONTINUE##
- 部落格會笑了!Blogger Smiley!
- 隱藏 Blogger NavBar
- 隱藏 Widget
- 繼續閱讀功能
- Sidebar 側邊網頁元素 折收/展功 功能
- 讓網誌作者的回應文章高亮度顯示
- 標籤雲 Label Cloud 功能
- Sidebar 側邊網頁元素 Icon 圖示功能
- 加入社群書籤功能
11種表情輸入對照碼: ※記得表情前面要空一格!
• 微笑 :) or :-)
• 大笑 :D or :-D
• 害羞 :$ or :-$
• 難過 :( or :-(
• 吐舌 :p or :-p
• 眨眼 ;) or ;-)
• 親親 :k or :-k
• 火大 :@ or :-@
• 閉嘴 :# or :-#
• 囧臉 :x or :-x
• 驚訝 :o or :-o
也許之後還會有更多擴充.
星期六, 7月 21, 2007
星期三, 7月 18, 2007
Firefox 突破50%.........
最近一個月的統計.
1. Firefox 346 55.01%
2. Internet Explorer 259 41.18%
3. Opera 12 1.91%
4. Mozilla 5 0.79%
5. Safari 3 0.48%
6. Konqueror 3 0.48%
7. Mozilla Compatible Agent 1 0.16%
-----------------------------------------------------------
唔,果然是blog內容決定一切。
都是programer的東西(汗)
grub-install with SATA disk
這時使用linux的Live CD求援。
透過grub-install指定開機區與設定檔,就能把分割區救回來。
範例:我的 /dev/hdb 掛載到 /disk2 下,如何安裝 grub 到 /dev/hdb ?[root@linux ~]# grub-install --root-directory=/disk2 /dev/hdb
一般來說,這樣子就ok了。
但是,SATA的硬碟會有些許問題。諸如...
does not have any corresponding BIOS drive
的錯誤。
這是因為device map broken所導致的。請服用強制recheck。
# grub-install --recheck /dev/sda即可搞定~!!
星期四, 6月 28, 2007
星期六, 6月 16, 2007
Error: unresolved external symbol _WinMain@16
- 如果你是用VS開新專案,然後手動加入source code
- 如果以前是用VS2003或是更早的版本,然後轉到VS2005上
- 想把一個Win32 Console Application增加 UI,但是背後的Console Window不知如何拿掉
- 想把專案的Console Window叫出來。
function ___tmainCRTStartup ]。其中,粗體字部分也許會不同。
這種問題是因為,Source Code中的main,也就是我們預計的程式enrty point 與VS預期的名字相異,造成VS抓不到entry point,當然就出現了unresolved symbol。一般來說,是由於SubSystem沒設定好所造成的。 更改Linker->System->SubSystem即可
但如果你的程式中,有新舊兩種WinAPI,比如include
今天花了4個小時左右,終於把這個問題搞懂.....Orz
重點記錄幾個地方:( 以VS2005為例 ) Project Configuration Property中
- General -> CRL support:如果用VS2005的Windows Form,是需要用到CRL( /crl )的,如果想把project compile成lib、dll,似乎要用/crl safe。
- C/C++ -> Preprocessor:Definitions 中,有無_CONSOLE、_WINDOWS、WINDOWS等。這個地方其實就等同設定#define _CONSOLE...等。
- C/C++ -> Precompiled Headers:一般是設定成stdafx.h。不設定....似乎也沒差。
- Linker -> System -> SubSystem:設定成 WINDOWS、CONSOLE兩類最常見。如果沒設定,VS會看你的main function來選擇
- CONSOLE:Win32 character-mode application. Console applications are given a console by the operating system. If main or wmain is defined, CONSOLE is the default.
- Extensible Firmware Interface:The EFI_* subsystems. See the EFI specification for more information. For example, see the Intel web site. The minimum version and default version is 1.0.
- NATIVE:Device drivers for Windows NT. If /DRIVER:WDM is specified, NATIVE is the default.
- POSIX:Application that runs with the POSIX subsystem in Windows NT.
- WINDOWS:Application does not require a console, probably because it creates its own windows for interaction with the user. If WinMain or wWinMain is defined, WINDOWS is the default.
- Linker -> Advanced -> Entry Point:其實就是指定你的main function的起始位置。這是用在當你選了SubSystem成Console或是Windows,VS卻認錯你的entry point。此時,用這邊手動指定即可。
星期五, 6月 08, 2007
Tag Cloud
所以我們只需要把原有的Tag List製做成Tag Cloud即可。
首先,先改CSS的設計部分:
/* Style for Label Cloud */
#labelCloud {
text-align: center;
}
#labelCloud .label-cloud li{
display: inline;
background-image: none !important;
padding: 0 5px;
margin: 0;
vertical-align: baseline !important;
border: 0 !important;
}
#labelCloud ul{
list-style-type: none;
margin: 0 auto;
padding: 0;
}
#labelCloud .label-count {
padding-left: 0.2em;
font-size: 9px;
color: #777;
}接下來,加入製做Tag Cloud的js code
紅色部分是自訂的地方,諸如blog網址、大小字型、顏色…等。
<!-- User defined inline javascript -->
<script language='javascript' type='text/javascript'>
<!-- Functions used for Label Cloud: adjustLabel(), generateLabels()-->
var labels = new Object;
function adjustLabel(min, max, weight, total) {
if (min > max)
var temp=(min-max)/Math.log(total), result=min-Math.floor(Math.log(weight)*temp);
else
var temp=(max-min)/Math.log(total), result=Math.floor(Math.log(weight)*temp+min);
return result;
}
function generateLabels(){
var blogURL = 'http://abinlee.blogspot.com';
var maxFontSize = 18;
var minFontSize = 11;
var maxColor = [204,204,204];
var minColor = [119,119,119];
var showCount = true;
var labelColor= [];
var labelSize = 0;
var labelCount = new Array();
for (var i in labels)
if (!labelCount[labels[i]])
labelCount[labels[i]] = new Array(labels[i])
total = labelCount.length-1;
section = document.getElementById('labelCloud');
ul = document.createElement('ul');
ul.className = 'label-cloud';
for(var tag in labels) {
for (var i=0; i < 3; i++)
labelColor[i]=adjustLabel(minColor[i], maxColor[i], labels[tag], total);
labelSize = adjustLabel(minFontSize, maxFontSize, labels[tag], total);
li = document.createElement('li');
li.style.fontSize = labelSize+'px';
a = document.createElement('a');
a.title = labels[tag]+' articles with Label: '+tag;
a.style.color = 'rgb('+labelColor[0]+','+labelColor[1]+','+labelColor[2]+')';
a.href = blogURL+'/search/label/'+encodeURIComponent(tag);
if (showCount) {
span = document.createElement('span');
span.innerHTML = '('+labels[tag]+') ';
span.className = 'label-count';
a.appendChild(document.createTextNode(tag));
li.appendChild(a);
li.appendChild(span);
}
else {
a.appendChild(document.createTextNode(tag));
li.appendChild(a);
}
ul.appendChild(li);
ul.appendChild(document.createTextNode(' '));
}
section.appendChild(ul);
}
</script>
最後把widget code展開,找到id='Label1'的widget,將這整個widget以下面的code取代掉。
<b:widget id='Label1' locked='false' title='Labels' type='Label'>
<b:includable id='main'> <!-- Add Label Cloud -->
<b:if cond='data:title'>
<h2><data:title/></h2>
</b:if>
<div class='widget-content'>
<div id='labelCloud'/>
<script type='text/javascript'>
<b:loop values='data:labels' var='label'>
labels["<data:label.name/>"] = <data:label.count/>;
</b:loop>
generateLabels();
</script>
<noscript>
<ul>
<b:loop values='data:labels' var='label'>
<li>
<b:if cond='data:blog.url == data:label.url'>
<data:label.name/>
<b:else/>
<a expr:href='data:label.url'><data:label.name/></a>
</b:if>
(<data:label.count/>)
</li>
</b:loop>
</ul>
</noscript>
<b:include name='quickedit'/>
</div>
</b:includable>
</b:widget>
ps. 因為這樣子做出的Tag Cloud是以Blogger給定的Tag list製做的,所以排序就是以Blogger的設定為主,以次數或是字母排序。當然,改成了Tag Cloud之後,還使用次數排序,就看不出效果啦~
Toggle/ Untoggle Your Blogger's Sidebar
要做的工作就是:
- 把想展開摺疊的區塊找出來,
- 做一個按鈕或連結,當按下去的時候,去切換該區塊的狀態(display inline or none)。
<script type='text/javascript'>
<!-- Function used for Sidebar Element Toggling: ElementToggle()-->
function ElementToggle(id) {
var element = document.getElementById(id).getElementsByTagName('div');
for(i = 0; i < element.length; i++) {
attribute = element[i].getAttribute('id');
if(attribute == 'toggle')
{
if (element[i].style.display == 'none')
element[i].style.display = 'inline';
else
element[i].style.display = 'none';
}
}
}
</script>
接下來,要去修改元件 (Widget) 的程式碼。同樣以個人資料 (Profile) 元件為例,找 <b:widget ...> 開頭 </b:widget> 結尾的區段,應該是類似下面這樣:
<b:widget id='Profile1' locked='false' title='AUTHOR PROFILE' type='Profile'>
<b:includable id='main'>
<b:if cond='data:title != ""'>
<h2><data:title/></h2>
</b:if>
<div class='widget-content'>
............. (程式內文略過不表)
</b:includable>
</b:widget>
這個元件的 ID = Profile1,是範本裡用來識別該元件的方法,接下來要插入動態切換的連結,可以用圖片(此處我用[+/-]代替)
<b:widget id='Profile1' locked='false' title='AUTHOR PROFILE' type='Profile'>
<b:includable id='main'>
<b:if cond='data:title != ""'>
<h2><data:title/><a href='javascript:void(0); style='float:right;margin:-23px 0;' onclick='javascript:ElementToggle("Profile1");'>[+/-]</a></h2>
</b:if> <div class='widget-content' id='toggle' style='display:none;'>
............. (程式內文略過不表)
</b:includable>
</b:widget>
pulseaudio可以輸出到常用的alsa oss 驅動的裝置,esound server,遠端電腦(rtp),或甚至是windows 的waveout驅動.Note: 1. mplayer設定成pulse輸出的話,會crash. 改用esd輸出。
可以接收來自
1.有支援pulseaudio的程式(xine,bmpx,audacious等等)
2.透過alsa-lib的plugin讓所有支援alsa的程式使用pulseaudio
3.支援esd的程式..pulseaudio可以完全取代esd
4.OSS模擬 (像是aoss一樣,可以給java發出聲音)
其他其他...
大概分享一下我在我電腦上使用pulseaudio的安裝方法apt-get install pulseaudio pulseaudio-module-x11 paman pavucontrol pulseaudio-esound-compat pulseaudio-utilsmodule-x11 讓x11發出的警告beep聲音透過pulseaudio發出,像是..命令列已經沒有東西了又按backspace就會逼..vi裡面亂按也會..
paman pulseaudio manager可以讓你看目前server的狀態,所有的input/output
pavucontrol 音量控制,這個一定要裝,可以控制個別程式的音量
修改 /etc/pulse/default.pa
輸出輸入### Load audio drivers statically輸出到alsa的dmix裝置,
load-module module-alsa-sink device=dmix
load-module module-alsa-source device=plughw:1,0
從硬體1,0來錄音,你也可以設定成dsnoop
其實,修改到這樣子就可以用了...
不過我還加了esd的功能..
load-module module-esound-protocol-tcp auth-ip-acl=10.11.12.13;192.168.50.0/24;127.0.0.0/8讓那些ip可以透過tcp把聲音送到本機,或是也可以用unix socket
load-module module-esound-protocol-unix
恩...就先這樣,執行pulseaudio之前.要先建立esd socket,不然,本機也會用tcp連線mkdir -p /tmp/.esd執行看看
chmod 1777 /tmp/.esd
touch /tmp/.esd/socket
chmod 777 /tmp/.esd/socketpulseaudio --verbose
To support audio of Flash: pulseaudio.revolutionlinux.com
星期一, 6月 04, 2007
The difference between them is to open a new display or connect to the existing one.
The easiest way for building server is choose the System -> Preference -> Remote Desktop and set up your settings.
But it's the solution in Gnome.
I use E17 as my window-manager, and don't know how to set up the vino-preference.
So, I've tried vncserver, vnc4server and finally x11vnc.
x11vnc is a server which let you control desktop environment remotely. It needs to start up X window first and use this display session( usually :0 ).
The most common problem is Xlib find display:0 error as .Xauthority isn't well set up.
When you see the tips and tried
ps -wwaux|grep authYou'll find the existing session's auth. Here's the file used by Enlightenment 17.
x11vnc -auth /var/:0.XauthAlso, you need a password for authentication of remote connection.
Just exec vncpasswd to generate ~/.vnc/passwd and use -rfbauth $HOME/passwd.
Or use -usepw. A .x11vncrc will be helpful.
As the client side, you can just use RealVnc's free client to connect the server.
ps. I found some errors as :
Xlib: connection to ":0.0" refused by serverGoogle it and find the solution:
Xlib: No protocol specified
sudo xhost local:kimkBut I still don't understand why.
星期四, 5月 31, 2007
Upgrade Ubuntu from Edgy to Feisty
But an error occurred.
If you use GUI to upgrade it, you might get the following message:
Authentication failedor use command line to type "sudo update-manager -c -d", get more specific message:
Authenticating the upgrade failed. There may be a problem with the network or with the server.
extracting ‘/tmp/tmpVuEU0n/feisty.tar.gz’It's obvious that we don't have a gpg authentication. So, just type gpg ,as a normal user. Once it says Go ahead and type your message …, you can just press Ctrl-C to get back to the command prompt.
authenticate ‘/tmp/tmpVuEU0n/feisty.tar.gz’ against‘/tmp/tmpVuEU0n/feisty.tar.gz.gpg’
exception from gpg: GnuPG exited non-zero, with code 131072
星期四, 5月 17, 2007
[HowTo] FreeBSD console framebuffer
cvsup -h cvsup2.freebsd.org -g -L 2 /usr/share/examples/cvsup/standard-supfileObviously, you can use whichever cvsup server you want. You can install fastest_cvsup to fins what server is fastest for your location as well. If this is the first time you are cvsup-ing, it will take some time. When it completes, we will continue.
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/GENERICVESAName it to whatever you want.
vi /usr/src/sys/i386/conf/GENERICVESAYou will see, a couple of lines down an "ident GENERIC" line. You can change this if you want. It will be the display of the kernel in uname.
Directly after that, you will start to see 'option xxxxx #Description' sections..
This is where we add our options:
options VESA
options SC_PIXEL_MODE
Save your changes and exit.
From here, you generally build the world, and the kernel, install the kernel, reboot to single-user mode, mergemaster, installworld, etc... but I'm going to skip the buildworld because it will eat up a lot of time, and we can do it after the kernel.
cd /usr/srcNow, you won't get the resolution just yet, we're not quite done. Boot back up and do the following:
make buildkernel KERNCONF=GENERICVESA
make installkernel KERNCONF=GENERICVESA
reboot
kldload vesaYou should see a punch of different modes. Scroll through and find one you'd like. For me, 1024x768x24 is the size I want. The first column shows the mode number, mine being 280.
vidcontrol -i mode | less
Choose the one you want and try:
vidcontrol MODE_xxxSubstituting "xxx" for the number of the mode you want. The screen will go bank for a second, then it should come back with the prompt. If it cannot handle the resolution you specified, it should return with an error.
If it works, GREAT! Now we can add this to /etc/rc.conf to load on boot-up. However, we must make sure we load vesa on boot-up as well.
vi /boot/loader.confadd the line :
vesa_load="NO"change it to "YES" (maintaining caps)
Save, and exit.
vi /etc/rc.confand add to the end:
allscreens_flags="MODE_xxx"
星期三, 5月 16, 2007
星期三, 5月 09, 2007
安裝FreeBSD在Asus u5f
在鳥鳥的中信局採購單、網卡要能快速的build與更改的考量下,買了U5f...
( 說實在的,我很想買Ferrari 1005耶! 如果我不是負責此產學案的人,就勸敗了啦~!!! )
在打開了純白色的u5f,安裝了Unbuntu 7.04之後....
一時興起,拿起來FreeBSD 6.2想要安裝。
結果.... 冏
星期五, 3月 30, 2007
wikipedia
Wiki是一種可在網路上開放多人協同創作的超文本系統
一個wiki網站讓人能夠用網頁瀏覽器以及很簡單的標記語言合作撰寫文件。wiki技術的關鍵特質是能輕易用來創造與更新許多網頁。一般來說,改變網頁是不經審核的。大部分的wiki都是公開給一般大眾,不用註冊帳號。有些wiki會替使用者自動簽名,並且要求使用者持有一個「cookie」。私人的wiki之中,大多會要求身分認證。大部分的編輯都是即時的,而且幾乎會立即出現在網路上。這一點常導致系統被濫用。-----引自wikipedia
但是近幾年wikipedia這個網站在世界各地人們的建構下,形成一個龐大的資料庫,裡面有的資料包羅萬象。雖然沒有保證正確性,但至少有個參考說法,不是嗎?
所以除了google之外,使用wikipedia當作學習各類新名詞的人也逐漸上升中,可預見的,wikipedia將在網路中占有一席之地。
但是,這個網站在中國大陸如今卻被封鎖了。詳情請見Wikipedia talk:應對封禁。我想,這對對岸同胞的資訊來源是一大損失吧
星期四, 3月 29, 2007
sftp可能會發生的問題
因為filezilla連線時,就卡在CONNECT上,完全不知道原因。
用wireshark看trace時,也只發現到有很多encrypted packet。
試著用linux的sftp連上工作站時,出現了戲劇化的轉折-
Received message too long 1500476704
What????
Google發現原來是sftp的FAQ阿(我真是太弱了...)
問題出在大家的 .bashrc/.tcshrc/.cshrc 這幾個檔案裡面。
如果我們在 .tcshrc/.cshrc/.bashrc 裡面 echo 一些東西,
或者是執行像是 date, nfrm, whosebirthday 等會印出東西的
動作,因為 sftp 執行時也會去執行這些檔案中的動作,所以
當這些檔案一輸出東西,sftp 的 server 就產生錯誤,而導致
上面所說的錯誤訊息並且斷線。
那solution呢?
當然是把會印出訊息的地方轉到sftp登入時不會執行的檔案上;
也就是.....bash的bash_profile。
或者也可以加上if [$?prompt]來限制sftp去印這些東西~
ps. 如果執行一些命令時發生錯誤,那麼印出的錯誤訊息也會使sftp爛掉喔~
星期日, 3月 25, 2007
Nikon Coolpix 4500隱藏的祕密
原來4500除了能存TIFF之外,還能存RAW....這真是大福音阿~!
雖然我現在少了圓頭的usb傳輸線,所以不能測試。但還是先把這麼重要的資訊記下吧~!
偷k也用得到呢
2篇關於打開4500 RAW的教學 1 2
關於RAW於TIFF的差別
个人认为 RAW 的主要优势不是分辨率,而是层次,12-bit 的 RAW 在层次上会明显强过 8-bit 的 JPEG,内置的 TIFF 也是 8-bit 的,所以实际价值不是太大。另外 12-bit 意味着可能具有更大的动态范围(具体的动态范围增加的幅度与机器有关)。
但是显然的,人眼对色彩和层次的分辨率是比较低的,不如对明度的分辨率,因而人眼看起来 100% 大小的 RAW 与 JPG 不会有明显区别,但放大到 400% 时就会有区别。我们似乎更重要的是提高色彩层次,从而具有更多的后期调整的空间。
使用RAW的後續編輯心得 1