先说结论
打开图片缩放,把图丢进去,只打一个数字,一般是宽度,另一个留空。高度按画面本身的比例跟着走,而这几乎总是你要的:“宽 1920”的意思就是“宽 1920,高该多少是多少”。
下面讲的都是一个数字不够用的情况:人家给了你一个两边都定死的框、图片必须变大,或者一整个文件夹的文件得出来一个样。
缩小和放大会损失什么
这不是同一个操作的两个方向,为什么不是,值得说清楚。
缩小图片会减少信息。对真实像素进行平均处理可能让照片在使用大小下更干净,但小字、细线和纹理也可能消失。请按实际使用大小比较;像素更少并不保证所有可见细节都能保留。
把图变大就非编不可了。那些细节不是文件里没存,是当初根本没拍到。放大器唯一能做的,是拿邻居猜出中间的像素,而两个已知值之间的猜测就是一条平滑的斜坡,所以放大的照片看着发糊,不会更锐。它是同一张图的一份更大的副本,不是一份更细的。
所以这里的工具默认开着“绝不把图片放大”。你要是真需要那个像素数,印刷厂要求最小尺寸、模板不收低于某个宽度的图,那就把它关掉,但心里得清楚:你买到的是像素,不是细节。
那些看着真能补出细节的机器学习放大器,完全是另一回事:它们是按“图片通常长什么样”的模型,编出一层看着合理的纹理。做壁纸没问题。可要是一张人像、一份文件,或者任何会有人据此下判断的东西,你得明白那些多出来的细节是虚构的。
说清楚尺寸的三种办法
多数工具,包括这一个,都接受这三种,各有各的用武之地。
- 精确像素。人家指定了数字就用它:头像必须 400×400,横幅必须宽 1500。除非两边都给了你,否则只填一边,另一边让它自己跟。
- 百分比。你只想整体等比小一圈、并不在乎具体数字时用它,比如一批要放进文档的照片,“缩一半”。
- 长边。三种里对混杂的一批最好用。“最长边 1600”让每张图,不管横的竖的,都能放进一个 1600 像素的方框里,而实际生活中所谓“把这些都弄成合适大小”,说的一般就是这个意思。
框的比例跟画面对不上的时候
缩放真正见分晓的就在这儿。宽和高你都给了,又跟画面本身的比例对不上,那就总得有一样让步,而能让的一共就四种:
- 整张放进框里。画面全留住,某一个方向上比框小一截。什么都没丢,也没变形,只是你要的那个精确尺寸没拿到。绝大多数情况下,这该是默认选项。
- 铺满框,溢出的裁掉。尺寸精确到你要的那个数,画面挂在框外的部分没了。缩略图、头像、封面这类形状定死、主体又在中间的,用它对;要紧的东西靠边站的,用它就错。
- 垫起来。画面全留住,居中放,剩下的地方用你挑的颜色填上。系统要求尺寸精确、而画面一点都不能少时用这个,商品图经常是这么办的。
- 拉伸。把画面挤扁或者拽长以塞进框里。除非你就是故意要这个效果,否则它从来不是你想要的,而且是这四种里所有人一眼就看得出不对劲的那一种。
要是你发现自己伸手去点拉伸,那你多半想要的其实是裁切。
裁切是另一件活,而且往往才是对的那件
缩放改的是用多少像素来描述整张画面。裁切改的是你留下画面里的哪一块。心里想的是后者、手上却去动前者的人,多得出乎意料,而“这张得是方的”从头到尾是个裁切问题,不是缩放问题。
顺序也照这个来:先裁出你要的取景,再把结果缩到你要的尺寸。反过来,就等于在一张已经丢过像素的图上挑构图。
这里的工具把两件事放在一趟里做,正是这个道理:拉个框,需要固定比例就锁一个形状,然后说结果要多大。放在一趟里做还有个好处,画面只被编码一次,为什么这要紧,下一节说。
整批裁切
在一张图上画的框,套到其余图上时,用的是同样的相对区域,也就是各自宽高的同样比例。一批本来尺寸就一致的截图或者导出图,那就是完全相同的一个矩形。一批尺寸混杂的,那就是同样的取景而不是同样的矩形,这通常正合你意,但拿它去处理五十个文件之前,值得先知道。
重新编码的代价,以及怎么让它只发生一次
调整 JPEG 或 WebP 尺寸需要解码、重采样像素并重新编码。缩小时,重采样可能丢失细节;JPEG 或有损 WebP 随后可能增加压缩瑕疵。这是两种不同的损失,请检查尺寸和编码结果。
由此有两点。第一,出口那个质量设置很要紧:照片放在 80 到 85 上下就已经看不出来了,文件却比 100 小得多。第二,只做一次。一张已经缩过两次的图再缩一次,就是三代有损编码叠在一起,那是看得出来的。
PNG 没有这笔代价,因为它是无损的,缩放后的 PNG 就是缩放后的那些像素。你要是中间还有好几步、最终格式又没定,那中途用 PNG 干活,可以避免代际累积。
这里的工具有个细节值得知道:一个你其实压根没改动的文件,会被逐字节原样还给你,不重新编码。对一批图要求“最长边 1600”,那些本来就不到 1600 的会原样出来,标签一个不少。一个悄悄把它们重编一遍的工具,等于在没人要求它动的文件上白白扣掉你的画质。
透明,以及它的下场
PNG 和 WebP 能存透明。JPEG 不能,这个格式里压根没有 alpha 通道。所以把一张带透明的图存成 JPEG,就必须在它后面垫点什么,而垫的是一块纯色。
多数工具用白色,也不跟你说一声。这没什么问题,直到你的 logo 落在一个深色页面上,外面套着一个白框。要么自己有意识地挑这个颜色,要么存成 PNG 或者 WebP,把透明留住。垫成固定尺寸时用的也是这个颜色,那是人们意外撞见这件事的另一个场合。
人家给了你一个数字,该用哪个工具
别人扔给你的数字有两种,需要的工具也不同。
“宽 1200 像素”是尺寸问题。该用图片缩放:你说要多少像素,它就给你多少。
“不能超过 500 KB”是文件大小问题,而缩尺寸只是解决它的办法之一。图片压缩会去找刚好塞进目标的最高画质,只有画质单独够不到时才动尺寸,这一下的代价,它那篇指南里讲了。
这些事一样都不用上传
解码一张图、缩放它、再编码回去,浏览器早就干得了很多年了,网页把一张图画成另一个尺寸,用的就是同一套东西。你的照片要变小,技术上根本没理由跑一趟服务器再回来,而这里的工具也确实哪儿都不发:页面的 Content-Security-Policy 把它可能联的地址全列了出来,没有一个是本站的。
与其听我们说,不如把页面打开,拔掉网线,照缩一张试试。把文件传给在线转换器安全吗?里还有另外三个检查,用在任何工具上都管用。