Sunset.  Chaco Canyon, New Mexico

第六章:为你的网站增加图片

菲立.格林斯宾      著 /《网上出版指南》的一部份


刚刚才建议出版者尽可能远离图片,为什么现在又要讨论如何快速的发布大量的照片?因为我想到《独立日》

这本书》(Richard Ford著),该书讲述的是男主人公--一个住在新泽西Haddam的离异地产经销商Frank Bascombe的一个漫长的,平淡无奇的周末生活的故事。并且该书还为作者赢得了普利策文学奖。

在电影版的《独立日》里,外星人轰掉了白宫,尽管不如书写得好,但是到目前为止,看电影的远远多于看书的。

人们都爱看图象。

虽然人们对电影的喜爱远胜于图象,但是对大多数的出版者来说,昂贵的电影制作根本不现实。并且对大多数1998年的用户来说,下载速度也太慢。

本章将要讨论如何建立网上的图片库,及如何以最切合用户需要的方法显示出来。

网站上的图片效果可以比杂志上的印刷效果好

尽管计算机的显示器的分辨率比照片要低,但是它们可以显示出生动得多的色彩。如果处理得好,你可以向用户展示出令人叹为观止的显示摄影幻灯片的技巧。

高清晰度黑白照片的对比度范围为100-1。意思是照片中最反光的(最白的)部分反射的光线是最暗的(最黑的)部分的100倍。理想的反光表面应该是极度平整和光滑的,反之,理想的不反光表面应该是类似于毛毯的结构。

目前还没有办法制造出即有特别反光的区域,又有特别吸光的区域的相纸。在这方面,杂志的纸张又要比一般相纸差很多。反光最强的地方并不十分白,暗的地方也不是十分的黑。对比度的范围也只有20-1。

幻灯片所能表现的对比度比印刷的范围大几倍。这是因为它是利用透过的光线的强弱来显示图片的。在幻灯片上明亮的部分,光线是近乎无阻碍地透过。黑暗的部分的光线却近乎完全地被吸收。摄影师们总是为冲印出来的照片丢失了生动的细节而感到痛心疾首。Ansel Adams把研究摲智低硵(Zone System)当作自己毕生的事业,他希望能有系统地把亮度范围高达10,000比1自然场景体现在亮度范围只有100比1的相纸上。

在表现对比度方面,计算机显示器比相纸更接近幻灯片。显示器上的黑暗是通过摴氐魯该点物质的荧光而得以实现。因此该点所能发出的剩余的只是室内光线在显示器玻璃屏幕上的反射。因为显示卡可以提供256种强度,也许你会认为显示器的对比度范围是256-1,但是,由于显示器对电压的响应并不是线性的,所以一般来说,显示器的对比度范围应该是在100-1到170-1之间。

大多数的网络出版者并不了解显示器在显示图片上的这种优势。他们只知道把照片放在平板扫描仪上,而根本未曾想过直接扫描原来的幻灯片或是负片。摄影用的底片只能够记录下原场景中色彩的一小部分,冲洗出来的照片则又必然要损失一些,再经过扫描及数字化之后的图片总是看起来平淡无奇,毫无生机。
Merchants in Padua's Piazza Delle Erbe

一开始就要考虑建立图片库

与其按每个工程来搜集和组织图片,倒不如先从建设一个图片库来考虑。成功的图片库必须具备以下的特性:

进行高品质的扫描并不困难。只要有拍摄时照相机里的幻灯片或是底片即可,千万不要用复制的幻灯片,也不要用冲洗出来的照片。扫描的过程必须在一间无尘的房间里进行,否则你恐怕就要把剩余的生命用来在PhotoShop里修复照片了。虽然分辨率是衡量扫描仪性能最经常用到参数,但是这并不比最大扫描密度重要。你需要的是可以深入扫描图片细节的扫描仪,尤其是在扫描幻灯片的时候。

完全丢开原始幻灯片或是底片的意思就是彻底丢开。比如某摄影杂志向你索要一张高清晰度的图片用于出版,你可以马上提供一个2,000x3,000点的拷贝,而不必翻箱倒柜的去找原始的幻灯片。再比如一场大火不幸把所有的照片都化为了灰烬,你必须在其它的地方存放着足够将来使用的备份。

快速查询所指的是,当用户说“我喜欢那张名为‘Heather有两个妈妈’的老虎的照片(http://photo.net/zoo)”,你必须能够马上找到。

利用Kodak PhotoCD来管理你的图片库

Chili Peppers in Chimayo, New Mexico Kodak PhotoCD是一种可以一摽鞌(光盘)三雕的扫描标准。CD上的所有图片都以5种分辨率进储,最高可达2,000x3,000。Kodak的这种扫描质量可以确保以照片品质输出20x30英寸大小的图片。要达到如此之高的扫描精度,负片或是幻灯片的扫描过程必需在有严格灰尘控制的实验室里进行。最新的一代(1996)的PhotoCD扫描仪可以深入的捕捉底片上的每个细节。如果想得到更细致的4,000x6,000像素的图片,Pro PhotoCD可以实现。

因为每张扫描图片要占去5MB的硬盘空间,所以在项目结束后,你会考虑把他们删除,但是使用PhotoCD,扫描的图片就被永久的保存在光盘上,可应不时之需。如果有杂志社向你索取图片,你可以把整个的pcd文件通过电子邮件寄去。

在PhotoCD里的快速检索,可以通过浏览Kodak事先准备的检索图片来实现。你就可以轻轻松松地在一分钟内迅速查找附在CD-ROM上的数百张检索图片。

全部的费用大概是多少呢?标准扫描一次35mm胶片大约价格在1美圆至3美圆之间。从4x5英寸大的底片上进行一次精细扫描大约要花15美圆左右。制作一张容量超过500Mb的PhotoCD要比买硬盘来存储同样多的数据便宜得多。

请访问 http://photo.net/photo/labs.html,那里有我最近比较喜欢的PhotoCD供应商。

把你的图片库搬上网

如果你把PhotoCD上5MB大小的pcd文件直接放在网上,没有人会欣赏你的做法。这不仅是因为在一个56K的调制解调器上下载如此巨大的文件要耗费12分钟,而且,即便是下载之后,也没有任何网络浏览器可以浏览Kodak PhotoCD的文件格式。减小图片文件的大小,也即下载时间,可以通过两种方法。第一种降低图片的分辨率,提供256x384点的图片而不是2000x3000点的(这个分辨率比现有的计算机显示器的显示能力大了很多)。每个点需要用3个字节来存储(分别记录红、绿、蓝三原色的值),这样以来图片文件的大小从原来的18 MB一下子就降为另外294 KB。JPEG图像压缩技术可以把照片中不被人眼所注意到的细节舍弃,从而达到图像压缩的目的。通常在不影响观看的情况下,可以获得10;1的压缩比。最后图片变成了29 KB大,用一个28.8的调制解调器下载,不过只要区区10秒。

有什么办法可以让出版者与网络用户共享他的高清晰度的图片呢?

大多数的商业网站出版者是一张一张,手动生成在小显示器上也能和文字很好搭配的JPEG图片。通常的尺寸是180x250点。用户从文字中获得的关于图片的信息要比直接从图片中获得的要多,除非图片的内容非常的简单。

如右图:一个单纯的没有超链接的小图,看上去让人有点莫名其妙。这是Canyon de Chelly废墟的照片,你能从这张图片上看出点Anasazi房屋结构的细节来吗?

更完善的方法是生成一大一小两个JPEG图片。把小的那张放在网页中,并通过超链接指向大的JPEG文件。我从1994年开始就是如此处理,但是常常苦于找不到为图片添加标题的有效方法。我既不愿让用户只可以浏览两种尺寸的图片,也不愿意在图片上再多添加一个通向更大图片超链接,因为这会把网页搞得面目全非。

右图:这小图包含着一个通向大一些图片的超链接。然而却没有合适的方法为这两张图片添加标题,并且在用户浏览大图片的时候他将无法继续阅读后面的文章。备注:这是我可爱的小天使Alex3个月的时候,取自 http://philip.greenspun.com/dogs/alex

“好心却常常帮倒忙”,不少的技术专家努力地设计各式各样互动的解决方案。服务器存储着高品质的图片,根据用户对图片分辨率、图像质量、以及显示区域的要求动态的传递给用户,以降低对因特网带宽的苛求。惠普公司的OpenPix(可以在http://image.hp.com获得)就是实现这一思想的绝佳典范。试试下面的Java小程序(取自http://photo.net/photo/flashpix-reference-images.html)。

  • 按住“shift”键并点击,缩小图片。
  • 按住“control”键并点击,放大图片。
  • 按住鼠标左键并拖拉,可以在图片上平移。

上图是John Belushi在麻省Martha葡萄园的墓碑。热情的歌迷在他的墓碑周围放上了啤酒瓶和其它的一些物什表示怀念。Linhof Master Technika 相机,Rodenstock 150mm镜头, Kodak Pro 100 4x5 胶片, 扫描至ProPhotoCD (4000x6000像素)。

用户可以在这幅有72MB之大的图片上平移、放大或是缩小、甚至是观察其中的任何一点,而无须完全下载。这种技术简直太好了... 果真如此?是不是需要在每一张图片的边上放个用户使用手册?抑或是在底端添上个工具条?是不是必须经过学习才可以在你的网站上冲浪?这样的图片浏览仿佛要用户都先学习如Adobe PhotoShop所要求的操作技巧,才得以随心所欲地浏览?

让我们从用户的角度来考虑一下?由小至大?的用户界面模式。出版者先是显示给你一张小的图片。如果你需要一个大一点的图片,点击它就可以得到。这种用户界面基本正确,但是当用户点击之后,返回给用户的仅仅是图片,没有标题、摄影的技术细节、以及更大尺寸的选项,这多少有点遗憾。

用户真正需要得是通过点击一张小图片而连往一个含有标题、技术细节、更大尺寸选项以及连向OpenPix服务链接的HTML页面。除非出版者有自动进行处理的程序,这是件工作量很大的工作,必须把PhotoCD上的内容拷贝到服务器的特定网络目录下。但是用户果真得到了最好的界面?

用户点击小图片究竟意味着什么呢?是要看512x768点大的JPEG?如果他的显示屏比较大呢?比较小呢?如果通往因特网的速度很慢呢?很快呢?如果诸如OpenPix等技术已经被内置进了浏览器呢?再假如该用户已经告诉了我他的需求了呢?Frozen Yogurt.  6th Avenue and 12th.  Manhattan 1995.

目前我网站得大多数图片的超链接是指向程序的。由于我的服务器采用的是AOLserver,这些程序时用AOLserver Tcl API来实现的,当然,用Perl CGI脚本,或是ASP也是很容易实现的。这些程序的主要任务就是检查那些要求发送大图片用户的Cookie中所包含的信息。如果某个用户以前说过?我是一个拥有1600x1200显示器和因特网高速连接的计算机迷,请把传送给我的图片尺寸缺省设置为1000x1500点。?,那么我的程序从cookie里了解到这些记录,自动的产生一个包含有大JPEG图片、标题、技术细节(如果有)的HTML页面给该用户。如果没有cookie,程序就采用一个比较合理的缺省值(直到1998年,返回的是一幅512x768点的JPEG图片,外加标题和连向更大图片的链接),另外还会有一个?点击此处,设定个性化参数?的超链接。若想试试,请点击右面的图案。

从PhotoCD Image Pacs中生成JPEG图片 Creating JPEGs from PhotoCD Image Pacs

在讨论如何大批量的处理图片之前,让我们首先来看看转化单独的一张图片需要经过哪些步骤。

使用PhotoShop

虽然很费时,但是采用Adobe PhotoShop是把PhotoCD Image Pac制成为JPEG最能保证品质的手段。下面是我认为的最佳制作流程:

  1. 在Adobe PhotoShop文件菜单里打开PhotoCD上的pac图像文件,(典型路径为G:\Photo_cd\Images\Img0001.pcd )。
  2. 首先除去PhotoCD格式常见的晕纹。呼出图象的光度分布(histogram)。光谱明暗两端一般都不会有象素分布。可试按自动调光按钮看看效果。假如太极端,可取消操作(undo),再手工把白点向左及黑点向右调。

    直接取自PhotoCD的照片。

    注意到图片中日落时的紫色没有?为了拍摄,我一直等到日落,之后摸着黑搭车回家,我是多么的敬业啊!  


    After Auto Levels: 竟然是在中午拍摄的!

    这就是我当时拍摄该照片的真实场景,也是由胶片冲洗出来的照片的模样。

  3. 随心所欲的编辑。用一块drawing tablet可以更方便地修改图象,或加一点视觉效果。
  4. 如果你想为图片加一个黑边,可以先把背景的颜色设为黑色,然后将其长和宽尺寸扩大到原来的102%即可。
  5. 对你的图片满意的话,用“保存为”命令把图片存成PhotoShop自己的格式。
  6. 根据下面的设定使用Unsharp Mask过滤图象一次:
    Image base/16 base/4 base base*4 base*16
    Resolution 128x192 256x384 512x768 1024x1536 2kx3k
    Amount 100 100 100 100 100
    Radius 0.25 0.5 1.0 2.0 4.0
    Threshold 2 2 2 2 2

    处理后效果不好的话,就取消刚才的操作,更换参数再试试。使用Unsharp Mask的目的是增大色彩区域交界处的对比度。参数Amount是用来描述操作力度的。一般我多是设定在60到140之间。参数Radius是用来描述自色彩交界处算起受影响的点数(愈大的图,此项设定就应当愈大)。参数Threshold描述当色彩交界处两侧的差异究竟有多大时,才进行操作。当图片带有噪声,或是要保留图片中细微的色彩变化,就必须采用较大的值。

  7. 用“另存为”命令将处理后的图片保存为中等品质的JPEG文件。因为这些文件要上载到UNIX系统中,所以我一般用有意义的字眼来做文件名,加上PhotoCD的编号,和表示分辨率的数字(1到5分别表示由base/16到base*16),最后还要清楚地加上文件扩展名".jpg"。例如"hairy-dog-37.4.jpg" 就表示这是一幅从IMG0037.pcd 上生成的1024x1536点的照片。
  8. 用“Revert”命令,从硬盘上重新调入没有经过unsharpen处理的以PhotoShop格式存储的文件。
  9. 用“Image Size”命令将图片尺寸缩减到标准PhotoCD的大小,再次运行Unsharp Mask。
  10. 将图片存为中等品质的JPEG文件。我用与步骤8相同的文件命名此文件,只是改变了表示分辨率的数字。比如,如果图片的尺寸为256x384,其名称应为“hairy-dog-37.2.jpg”。

这种方法的一个基本准则就是:不要将图片锐化两次,并且只能在完成了其它操作之后才进行锐化。这也是为什么我们需要按PhotoShop自身的格式保存一个图片拷贝的原因。

成批处理

一次只处理一张图片未免效率太低,可以考虑如何同时处理大量图片,并且为每一张片生成3种尺寸的JPEG,一个FlashPix格式的文件,以及一个可以产生带有图片名称HTML页面的网站服务器脚本。一个简单的做法就是,把PhotoCD中每一张图片的标题都写在一个纯文本文件里。我们很容易通过程序自动的读取相关的信息,以实现上文所描述的?用户选择?的设想。

下面是描述文件的格式:

第一行:标记需要转换生成的图片分辨率 
第二行:标记需要标注版权的图片分辨率
第三行:是否要锐化?(对于扫描模糊的图片)
第四行:是否添加边框 (适用于底片)
第五行:URL记录 (图片在服务器上的摆放位置)
第六行及以后:每幅图片的参数占一行,格式如下
<n<光盘上的编号>|<目标文件名>|<图片分辨率>|<标题>|<技术参数>|<alt>|<指南信息>

下面是我的一个例子:

101100
001111|copyright 1993 philg@mit.edu
sharpen:yes
borders:yes
url_stub:/images/pcd1765/
2|bearfight||Brooks Falls, Katmai National Park|Nikon 8008, 300/2.8 AF lens (used in MF mode), FOBA ballhead, tripod, Kodak Ektar 25 film
3|montreal-flower||In Montreal's Botanical Gardens|Nikon 8008, 60/2.8 macro lens, Fuji Velvia 
4|montreal-olympic-stadium||Montreal's Olympic Stadium|Nikon 8008, 20/2.8?, Fuji Velvia

第一行表明摻玃hotoCD里的每一张图片,缺省按第一、第三及第四种分辨率进行转化。第二行表明“在第三、第四、第五及第六种分辨率的图片里需要添加版权声明‘copyright 1993 philg@mit.edu' 。”接下来的几行指明所有的图片均需要锐化,并且添加黑色边框。所有的图片将会保存到我服务器的/images/pcd1765/目录下。

Brooks Falls, Katmai National Park 我打算转化的第一张图片的编号实际是2(如右图)。我希望在生成的JPEG文件名中包含"bearfight"的字样。接着的字段空着("||")的原因是我并不需要图片转换成其它的非缺省(1、3和4)分辨率。再接下来的是标题,最后是拍摄照片时的技术参数(大多数的出版者不太注意这些,但是我的目的是为了读者在阅读旅行游记的同时,还可以学习到摄影的技巧)。

这样做的好处呢? 请看/images/pcd1765/index-fpx.html。下面是在HTML里引用照片的格式:

<a href="/images/pcd1765/bearfight-2.tcl">
  <img HEIGHT=134 WIDTH=196 src="/images/pcd1765/bearfight-2.1.jpg" 
       ALT="Brooks Falls, Katmai National Park">
</a>

因为在上面的这小段HTML中,IMG和HREF都是绝对路径(以斜线开始),所以可以把它粘贴在服务器上任何需要的HTML页面上。但实际上,我并不剪切和粘贴来实现。我为我的文本编辑器(Emacs)设定了一个新的命令,只需输入"1765" 和 "2",然后编辑器就会自动地把上面的一段文字插入。在我写好了标题之后,只要花一个小时就可以处理100张PhotoCD上的图片,并把他们分别放在服务器的合适的HTML页面上。

小图所对应的tcl脚本程序中有几个值得注意的地方。首先,它是运行在AOLserver之上的,而不是独立的CGI脚本。这样做要比采用Perl脚本或是其它的任何手段效率高10倍。由于只是在用户点击了小图之后,这个脚本才被运行,所以效率的高低并不关键,除非你的网站超乎寻常地受欢迎,或是你的服务器超乎寻常地烂(wimpy)。尽管如此,我还是希望把服务器的处理能力尽可能多地留给图像处理和Oracle数据库。

其次的一点是关系到软件工程的问题,不看看Tcl脚本的源码就无法解释得清楚:

set the_whole_page \
    [philg_img_target $conn \
                      "/images/pcd1765/" \
                      "IMG0002.fpx" \
                      "bearfight-2" \
                      "784" "536" \
                      "copyright 1993 philg@mit.edu" \
                      "Brooks Falls, Katmai National Park" \
                      "Nikon 8008, 300/2.8 AF lens (used in MF mode),
                        FOBA ballhead, tripod, Kodak Ektar 25 film" \
                      "" ]
ns_return $conn 200 text/html $the_whole_page

整个程序基本上只呼叫一个名为philg_img_target的通用程序。也许等网络标准有了新的改进,服务器可以指定客户端采用什么样的色彩空间标准来显示图片。只要对这一个程序做小小的修改,我就可以把网站上的数以千计的图片在发送的时候都添加上一个?我是采用Kodak PhotoCD色彩空间扫描而来的?标记。我的照片将会在用户的显示器上以一个正确的色调渲染(但是现在的情况是,在大多数的Windows或Unix平台上略显昏暗,而在Macintosh则又过于明亮)。在philg_img_target 里同时也包括了如何设置和读取cookie里个性化设置的代码 (可以在 http://photo.net/wtr/thebook/philg_img_target.txt找到源码)。

这是怎么实现的呢?所有PhotoCD图片转为到JPEG是通过ImageMagick来做的。可以在 http://www.wizards.dupont.com/cristy/ImageMagick.html找到适用于大多数Unix系统和Windows 95/NT的,经过预编译的二进制源码。下面是一个典型的ImageMagick命令的例子 (生成一个小的JPEG图片):


convert -interlace NONE -sharpen 50 -border 2x2 \
-comment 'copyright Philip Greenspun' \ 
'/cdrom/PHOTO_CD/IMAGES/IMG0013.PCD;1[1]' bear-salmon-13.1.jpg

注意,这只是一个命令,在文件名称以前有一些关于图片处理的设置。因为我并不喜欢使用progressive JPEG格式(见下文),而这是ImageMagick的确省格式,所以我用"-interlace NONE"来取消这一设置。 扫描的过程总会使图片变得模糊,所以通过"-sharpen 50"我让ImageMagick稍微对图片进行一下锐化。"border 2x2"表示在图片外增加两个像素的边框,可以指定边框的颜色,确省值是黑色。最后,ImageMagick允许在JPEG文件里添加说明。只要用标准的文本编辑器,比如Emacs,打开这个JPEG文件,就能够看到"copyright Philip Greenspun"的字样(同样,其他的程序也可以显示着些信息,然而不知何故PhotoShop却不可以,不论是运行在Macintosh还是Windows上)。 参见http://photo.net/wtr/thebook/imagemagick.html那里有全部的设置说明。

源文件名,"/cdrom/PHOTO_CD/IMAGES/IMG0013.PCD;1[1]" 基本上是由PhotoCD上的文件目录结构来决定的。但是,最后的"[1]"则是为了让ImageMagick从Pac中生成一个128x192像素的小图来(按Kodak的说法就是"Base/16"格式)。 目标文件名,"bear-salmon-13.1.jpg" 包含有图片在PhotoCD上的原始编号(13),便于人们以后查找原始的Pac文件。

尽管ImageMagick很方便,但是每处理一个PhotoCD就要输入300个类似上面的命令则是件费时的事儿。如果一个女人愿意不辞劳苦地为你编写Perl程序,那么她准保是真的爱上你了。如果想使用那个饱含着我女朋友对我的深情的Perl程序的话,去http://photo.net/wtr/thebook/pcd-to-jpg-and-fpx.txt下载好了。然而浪漫的日子不会都风平浪静。当她交程序给我的时候,我抱怨程序欠缺有效的数据结构并建议她再去读读《计算机程序结构与说明》(Abelson and Sussman著, MIT出版社 1997出版)--MIT计算机系一年级新生的教材。I also asked her to rename helper procedures that returned Boolean values with "_p" ("predicate") suffixes. 她却回答说:“人们会耻笑你这个整天沉迷于60年代编程风格,呆板守旧的程序员的。”然后就把我踹了。

我只花了最小的劳动,得到了数以千计的在线图片,而每张图片都有三种分辨率的JPEG拷贝以及一个2000x3000点大的FlashPix拷贝。 那么我的回报又是什么?人们发来了数以百计的电子邮件,询问哪里可以找到有关Golden Retriever或是瀑布的照片。再一次我的MIT的朋友和Perl又向我伸出了援助之手。Jin Choi花了15分钟的时间编写了一个Perl程序,把我原先写在文本文件里的图片标题都找了出来,并存在一个大列表里。然后,我又把这个列表里的内容塞进了关系型数据库的一个表里:

create table philg_photo_cds (
	photocd_id		varchar(20) not null primary key,
	-- bit vectors done with ASCII 0 and 1; probably convert this to
	-- Oracle 8 abstract data type
	jpeg_resolutions	char(6),
	-- on which resolutions to write copyright label
	copyright_resolutions	char(6),
	copyright_label		varchar(100),
	add_borders_p		char(1) check (add_borders_p in ('t','f')),
	sharpen_p		char(1) check (sharpen_p in ('t','f')),
	-- how this will be published
	url_stub		varchar(100)	-- e.g., 'pcd3735/'
);

create table philg_photos (
	photo_id	integer not null primary key,
	photocd_id	varchar(20) not null references philg_photo_cds,
	cd_image_number	integer,	-- will be null unless photocd_id is set
	filename_stub	varchar(100),	-- we may append frame number or cd image number
	caption		varchar(4000),
	tech_details	varchar(4000)
)

-- build a full-text index using the PLS extension to Illustra
create index philg_photos_pls_index on philg_photos using pls
( filename_stub, caption, tech_details );

经过一两个小时的编程,用户可以通过http://db.photo.net/stock/对我网站上的所有图片的文件名、标题、技术细节进行全文搜索。现在试试搜索一下

这样的系统就很完善了?试想一下如果我不小心在文件名中拼错了一个单词会造成什么样的结果。为了更改这个错误,我不得不修改description.text文件。然后。必需重新执行转化程序,把整个PhotoCD都再转化一遍或是手工更改出错的那3个JPEG文件名 (另外还有与小图相关的所有HTML文档也要修改)。再有就是更改与之相关的tcl程序,以及提供照片索引的关系型数据库表里的记录。

也许更好的做法是把所有的图片信息都保存在同一个地方:关系型数据库。我们可以方便地从那里获得转化信息。如果我们愿意把图象库的服务水平都押在数据服务器的正常运做之上,可以索性把图象都存入数据库,然后让HTML文本都凭借图象编号取图,连tcl程序都省了。

一旦这成为数据库服务之后,我们是否可以允许别的用户使用呢?如果很多的摄影师都使用相同的数据库管理系统,那么一个5年级的学生可以方便的搜索到所有摄影师愿意捐出共享的“艾菲尔”铁塔的照片,以加到他关于巴黎的报告中去。这当然也会方便到那些愿意与客户合作的专业摄影师们。

恰巧,这也是3年来我一直在从事的项目之一。我想也许到1999年的7月就可以完成。详细资料,请见http://photo.net/photo/

 

在你网站服务器上组织JPEG图片

如果你不打算把网站完全构架于关系型数据库管理系统之上,你就得好好考虑一下JPEG图片在网站服务器上的存储位置。在我有了第一张PhotoCD(和Sama一起旅行)时,我把所有的图片一股脑地全都放在了与html相同的目录里。这样做真是愚蠢。

在我网站开放几个月后,一些杂志开始向我索要诸如http://photo.net/samantha/bear-fight.jpg的高品质的电子拷贝。在正打算把PhotoCD上原始的pcd文件发送给他们的时候,我才发现从URL上根本无法知道此图片究竟存放在我众多PhotoCD的哪一张上。当我需要在别的服务里使用《和Samantha一起旅行》的图片的时候,比如在photo.net上,我还不得不交叉引用。

几年后,我偶然发现了下面的这个系统:

为你的网站添加图片

含有丰富图片的HTML页面必然要比没有图片的页面下载费时。1994年的时候,Netscape为HTML中的IMG标记扩展了WIDTH和HEIGHT两个新的属性。如果设置了的话,他们就会告诉浏览器将要下载图片的尺寸,这样一来,浏览器就可以在没有下载任何图片之前,先把全部的文字显示出来。下面是一个显示小图的例子:

<IMG SRC="/images/pcd1253/pink-lady-and-dogs-8-sm.jpg" WIDTH=192 HEIGHT=128>

如果图片的真实尺寸并不是128x192,浏览器会毫不留情地压缩或扩展图片以适合这个设置,往往的结果是图片出现模糊或是马赛克的现象。那些没有采用上文提到的自动生成HTML文档程序的出版者,往往不知道要将图片的尺寸设置为多少。他们认为:?如果想把图片显示为200x300点大小,只要添加了WIDTH=300 HEIGHT=200的标记即可。?下面是我的一个朋友给我发来的电子邮件以及我的回复,里面谈到了这样做的后果。

刚刚在浏览了我六个月以前完成的网站时,我突然发现我的网站似乎在溶化,图片的色彩开始脱落。可能服务器出了问题,也可能是传送通道崩溃了。 现在无论做什么,我都担心这会导致可怕的结果。所有的图片不仅色彩暗淡,而且模糊,特别是在麦金塔计算机上,更显得色彩混浊,给人感觉这个网站的建设者是一个彻头彻尾的傻瓜。可是我们并不是傻瓜,虽然在网站建设上我只是一个新手,但是自从1990年开始,我就一直从事数字图像的工作,从没有遇到类似的情况。

赶紧想办法救救我。

我发现你采用了WIDTH和HEIGHT标记来改变你的 图片尺寸,比如:

http://.. [*** URL omitted to preserve my friendship ***]

在Netscape里查看一下"Page Info",你会发现显示尺寸是"455x288 (而不是实际的504x319)"。

除非你使用的是我的批量转化程序或是网络数据库程序,否则不设置WIDTH和HEIGHT恐怕是最好的选择了。在完成所有的网页后,运行WWWis (原来叫"wwwimagesize"),这是一个Perl程序,可以自动地找出html文件中涉及的所有GIF和 JPEG 图片的大小,然后重新撰写这个html文件,在IMG标记中添加WIDTH 和HEIGHT属性,并赋上恰当的值。这个程序可以在http://www.tardis.ed.ac.uk/~ark/wwwis/免费地获得。

其它可能对你有帮助的属性如下:

JPEG 之外的选择

标准的JPEG格式并不总是最佳的选择。如果你发布的图片只是由简单的线条构成,或者有着大块大块的同颜色区域,采用GIF格式可以显著地缩小文件 (参见我关于GIF和JPEG压缩比的论述 http://photo.net/wtr/img-format/)。

I personally don't like interlaced GIFs or progressive JPEGs (which only work with Netscape 2.0 and higher). 这两种格式的目的是希望用户可以在下载的同时,就可以看到一个模糊但是全尺寸的图片。但实际上,在全部文件下载结束前,用户看到的也只是一个模糊但是全尺寸的图片。有用吗?嗯,看上去有点模糊。哦,等等,图片的顶端似乎可以看出点什么了。也许就这么多?但是看上去还是有点模糊啊。也许Greenspun先生没有使用三脚架。哦,等等,现在好象又清楚一些了...

标准的GIF和JPEG一般是随着下载的内容的多少,一行一行地显现出来。用户只需在全部下载完毕之后,再仔细的欣赏,没有必要边看边犹豫:是不是还有没下载晚的?

JPEG真正的问题在于,它并不是存储于某一个标准的色彩空间内。所以当你在麦金塔的显示器调试好色彩后(gamma-corrected),可能在别人的PC或是Unix计算机上看起来极度可怕(typically not gamma-corrected)。 PhotoCD的图片一般保存在一个经过调较的色彩空间内,这样便可以有朝一日网络的标准支持出版者指定图片咖玛值的时候,你也不必花钱重新建立你的图片库了。 FlashPix格式的扫描图片也是有经过校准的色彩空间的。

注意:我最喜欢的摄影实验室--Portland Photographics,采取了一种非常有趣的方式来处理咖玛值。请见http://www.portphoto.com/。在http://photo.net/photo/fixing-gamma.html有我更多的论述。

PhotoCD之外的选择

如果负片或者是幻灯片的尺寸超出了4x5英寸大,并且/或者非常的致密,你也许会考虑到专门的服务公司进行鼓膜扫描。鼓膜扫描仪(Drum scanners)由于采用的是光电倍增管,因而不同于Kodak公司为其图形工作站配的CCD扫描仪,故其扫描精度有显著地提高。但是美中不足的是,他们不但价格昂贵而且扫描起来也特别的慢,扫描一张高精度的底片至少要花75美元。

如果你需要急切地要一大批的负片或是幻灯片放到网站上去,你也许希望使用桌面胶片扫描仪。在最近的桌面扫描仪的改进中有一项最为有趣,这种新系统可以从不同的角度去观察胶片,从而辨别出哪里是灰尘,哪里是划痕,哪里是真正摄影的图片。"Digital ICE"就是这种技术的一个代表产品,镶嵌在Nikon Super Coolscan 2000系统之中发售。

胶片之外的选择

The fountain in Piazza della Rotunda, in front of Rome's Pantheon 如果大家都有桌面出版软件,却没任何人能进行文字处理,那样的情形会是怎样呢?其实这种情况和我们今天(1998)在面对数字图像时是一样的。很多人的计算机里有Adobe PhotoShop或其它类似软件,但是要把图片数字化却需要经过一个令人痛苦的扫描过程。

目前的数字相机,无论从质量还是人机工程学上说都是一团糟。消费电子产品设计师似乎根本不愿意创新,所以在1998年你可以买到的数字照相设备大部分都是源自于视频摄像机,而视频摄像机的分辨率就没有超过640x480像素的。大多数公司的目标是把分辨率提高到1000x1000像素。一百万像素可以输出一张小但是?有照片质量?的图片,大多数的用户都可以接受。但是必需注意,照片的质量并不仅仅取决于分辨率。从某种方面说,数字照相机可以获得比传统胶片照相机好的效果,比如在人造灯光下可以获得纯白的颜色,更大的动态范围以及高敏感度(甚至可以不用闪光灯)

为了更快地在网上发布,而且并不打算将图片放大印刷,在1998年9月花上600美元就可以购买到比较称心的数字相机。但是,从长远看你也许会不满足只有静止图片的照相机。Canon XL-1 DV 便携式摄像机可以每秒拍摄下30帧静止图像,并且其质量与普通的数字照相机不相伯仲。所以你可以回到家,坐下来慢慢考虑,究竟是视频还是静止图片( 参见http://photo.net/wtr/streaming-video.html 那里有我在捕捉数字视频到硬盘的痛苦经历。总而言之:买 Miro的视频捕捉卡,而不要选DPS的)。

请允许我在这里说几句题外话。 随着数字照相机越来越广泛的使用,人们需要越来越多的磁盘存储介质。这是因为到目前为止还不存在一个应用于磁带的操作系统,虽然磁带进入我们的生活已经好多年了。凭借在摄像机制造方面的杰出经验,Sony和Canon如今可以制造出日本最优秀的数字相机。但最物美价廉的则非Hewlett-Packard莫属--因为HP的工程师无论是在模拟的还是数字的图像处理上都有一手,并且在用户界面上的品位也比那些日本公司高得多。

一旦数字照相机普及了之后,你就得为用户想个可以方便向你网站投稿图片的方法。用户们发表言论的地方,你同样可以让他们发表图片。

数字水印

把一些特殊的数据藏匿于图片之中,以便在需要时进行验证和检查,从技术上讲是可以实现的。这种技术就称为数字水印。它只是轻微的改变少数几个点的色彩或是强度。从理论上讲,数字水印的存在并不会明显的影响图片的品质。

下面是水印的两种普通的用法:

从理论上说,数字水印将会使那些没有得到许可或是没有付款的盗用行为变得更加困难。但是,实际上还存在着几个小问题:

不过,如何利用数字水印帮助独立摄影师维护版权才是最重要的问题。数字水印可以帮助摄影师警惕不法的盗版者。但是,如果用户来自其他的国家,版权保护可就不那么容易了。

我自己保护版权的办法

在从事网上出版的前几年里,我总是对版权侵害非常的愤慨。当看到我的一张照片在未经许可的情况下,竟被用来填补《财富》和《交互周刊》广告之间的空白的时候,我就马上产生了一个恶毒的想法--起诉。我并不是整天蹲在照相机后面,等待捕捉美妙一刻的摄影师,所以盗用我的作品用于丑陋的商业目的倒对我的影响不是很大。而且在美国,实际的诉讼并不适合中产阶级。我既负担不起请律师团来起诉那些卑鄙之人,也不愿把我的后半生都耗在整理法律文件上。所以我决定把精力都投入到创作新的作品而不是终日为旧作品被盗版而耿耿于怀。

一个好心的读者曾发给我一个有着未经许可使用《和Samantha一起旅行》中一张熊的照片的网页,在电子邮件中他说:“. . . 是的,国税局的确是想找你的麻烦。众所周知,他们每年都要抓那些涉嫌在申报收入时“做手脚”的名人的典型(Willie Nelson, Leona Helmsley, Darryl Strawberry, Pete Rose,等等)。但是,你也应当知道, 并不存在任何的法律要求你提交纳税申报单!. . .”只要花上88-1000美圆,你就可以在“如何合法地避免个人所得税”里购买到帮助。

这并不是我建设网站的初衷,所以我发了些电子邮件给那家公司,诚恳的请他们把我的图片去除。回复是令人沮丧的,但是我也不得不张着大嘴佩服他们的创造力:

我们的程序员说他根本没有阅读过你的大作,并且图片是来自于一个提供大量图片的网站(包括gif和jpg),谁都可以下载!鉴于这个原因,我们不希望和你在这个问题上牵扯不清,但是问题是明了的,这张图片的版权是属于你的呢,还是你也和我们一样从同样的地方下载来的,谁也说不清。

在你提出要求之前,我们必需进行必要的调查,以确定你对该图片的版权声明的合法性。

执行总裁 Dana Ewell

!解决方案! Group

我仍然没有足够的钱来雇佣一个律师团,来进行“将妖怪放回瓶子里”的伟大事业,但是我想我可以很好利用我的资产:(1)我的网站比普通的网站有趣 (2)我的网站比一般的网站更稳定(因为很老的缘故),更有序。每一次别的出版者被许可通过超链接使用我4000张在线图片中的某一张,我就可能因此得到一个读者。别人的网站糟吗?最好如此。当用户经由“蒙Philip Greenspun允许”的超链接连向我的网站后,一般也不太可能会再去按“退回”键。当然,由于我网站的非盈利性质,所以额外的访客并不会给我带来任何的收益,但是我喜欢把自己的工作和最多的人分享。我们应当照顾好诚实可信的用户。能不能利用我网站的稳定性和知名度来对付那些奸诈的小人呢?

突然我有了主意--建立一个在线的“恶人榜”。首先我会向那些侵犯了我的版权的用户发去电子邮件。如果他们置之不理,我会将他们的名字写在恶人榜上,让他们的子孙后代都能看见。我想那些乐于剽窃别人作品的人可能是由于缺乏创造力的缘故,他们也一定也没有能力为自己建立网络声誉。所以在网上搜索他们的名字可能不会得到太多的结果,但是其中必定会有我的“恶人榜”。如果要是有人报复我,建立了一个名为"Philip Greenspun beats his Samoyed"的页面,怎么办?不用担心,没有人会找到的,因为在AltaVista里搜索“Philip Greenspun”,返回的页面太多了。可以现在就试试看,再试试"Shawn Bonnough",比较一下。

一个讲究实际的人也许会对我的系统表示质疑,因为它既没有为我带来收入,也没能有效的阻止盗版。技术预言家也许会对我的系统嗤之以鼻--自60年代开始研究的“微支付”(micropayment)系统“马上就要”投入使用了。我想这些人的想法是没有错的,但是我并不对把因特网上约定俗成的规矩变成法律表示遗憾:通过电子邮件请求引用许可,谨慎地对待版权问题,如果犯规就要做好被人指责的准备。

这样的系统是最完善的吗?也许不是的,但是这要比雇佣一大堆律师看他们在法庭上大打口水仗有效得多。在我的系统里,我们可以在别人的网站上欣赏到自己的作品,可以在需要发泄的时候,为侵权者建立网页,然后等平静下来之后再全身心的进行创作。

摘要Summary

Chair car on the Boardwalk, Atlantic City, New Jersey. 下面是你应当在本章里获得的:

 

更多的信息



或者浏览下一章:为自己的网站做宣传   


philg@mit.edu
Add a comment | Add a link