上边这张照片不是异形,而是著名的鹦鹉螺。下边这张照片,是送给研究生同学的毕业纪念,向龙同学帮我激光雕刻的。

近期的照片在[http://www.douban.com/photos/album/134230762/].

电子书扫描版跟照片差点儿相同,一个可能的问题是看起来乌突突的,黑的不够黑,白的不够白,像是蒙了一层雾。用picasa的luck功能或者snapseed的automatic功能,都能把图片上的雾去掉。可是相同的功能用在PDF上的软件我没有找到。

可是假设弄懂了原理--让我想起 倚天屠龙记 里的杨左史,长戟大刀蛾眉刺各种武器的招法都是能够溶入拳法之中的。



就黑白 (严格地说,灰度)图片而言,"去雾"的基本原理是添加对照度。人眼看到的全黑、全白,以及其间所有的过渡色调,在计算机图片中都是用数字来表示的。人眼是很精密和拥有极大检測范围的光学仪器,从明亮到直视的太阳,到电影院里黑暗的座号,都能看到。而计算机图片仅仅能展示人眼可承受的范围中很小的一部分。这部分中最重要的信息(对于黑白图片而言是所有)是亮度。计算机图片用数字的大小来表示亮度,越亮的,也就是越白的,用较大的数字,越暗的,也就是越黑的,用较小的数字表示。



这样,比方说,图片上的每一个像素,从最暗到最亮,就相应着从0到255之间的数字。各种图像处理软件中的gamma校正就是用来指定这样的相应关系的。这样的相应可能是线性的,也可能是非线性的,在非线性的情况下,可能数字变化了非常多,而亮度变化非常小--类似于你调洗澡时的冷热水,扭了半天,还是挺凉,突然就热得能烫突鲁皮。你可能认为,这不是有毛病吗?是的,这样的非线性有时会带来麻烦,可是,同一时候它还有个长处,那就是 识别度 好。



我们规定一个数值,低于它就是全黑,无论数值怎样变化;再规定一个数值,高于它就是全白,无论数值怎样变化。这两个数值就是黑到灰和灰到白的阀值。之所以低于某数就视为全黑,是由于我们可能不希望呈现这部分暗调的细节,之所以高于某数就视为全白,是由于我们可能希望把这些都表现为高光。



捕捉到的现实是一回事,怎样呈现,是全然不同的还有一回事。二猫昨天问到,为什么书里净写些吓人的事情,既然它们非常少发生。我说,假设灰姑娘的故事真的全然写实,那么,整个故事里你大部分时间看到的都不是她遇到王子的舞会和红舞鞋,而是灰姑娘成天给她后妈和后姐们做饭做饭做饭做饭做饭做饭做饭……做饭



相同,一本PDF电子书假设扫描不当,也可能呈现了过多的暗部和高光的细节,而灰色调子的过渡层次不够分明。暗部和高光的范围能够通过调整黑和白的阀值完毕,以下会继续介绍;灰色调子的过渡层次,能够通过细调gamma校正完毕,本文不讨论,请自学。



所以,提高有雾电子书的对照度,原理就是又一次设置黑和白的阀值。以上是原理部分,下面是操作方法。



知乎上有人说,把pdf中的图片都导出来,用photoshop处理调整gamma或者设置黑和白的阀值,然后再导入成PDF。原理正是如此,可是这须要安装高大上的收费工具photoshop和acrobat professional,还可能须要一页一页操作 (?) ,有些杀鸡用牛刀的意思。以下介绍成批处理的方法。



第1步 抽样,使用 ImageMagick 把 PDF 转换为图片。其实,我们仅仅须要当中的一两张,只是我不知道怎样完毕。ImageMagick是linux下和windows下都有的工具,支持命令行。



$ convert 1.pdf 1.jpg



这样,得到了一大批jpg图片。



第2步 尝试,使用 GIMP 确定白色和黑色的阀值。用GIMP也行,用photoshop也行,凡是能调灰度图片阀值的,都行。调到你感觉最好,没错,就是“感觉”,这是个主观标准。然后把白色和黑色的阀值记下来。GIMP是linux下的photoshop。



以上两步不做也行,那么,接下来的阀值就能够靠猜、靠经验、靠多次尝试。



第3步 使用 ImageMagick 改动对照度



$ convert -level 38%,99% 1.pdf 2.pdf



这行命令的意思是:低于38%的,视为黑,高于99%的,视为白,把源文件1.pdf转换后存为目标文件2.pdf。



由于调整阀值的同一时候,也自己主动调整gamma线,使之更陡峭,所以灰色调子的层次会更鲜明一些。





原理讲了一大堆,还是仅仅是精浅的介绍,而方法中真正起作用的仅仅是一行命令。所以,这个故事告诉我们,知道怎么干非常easy,而知道为什么这么干会成功就难得多。当然,唯其如此,才干把长戟大刀蛾眉刺的功夫用在拳法掌法这些徒手格斗之中。或者,唯其如此,才干把阴影透视和色彩模型应用在画妆上。

添加PDF文件对照度的粗浅原理,及方法的更多相关文章

  1. robotframework 测试工具添加PDF文件内容匹配插件

    robotframework  这个需要了解的请度娘.本文实现的是一个小功能.大体分为如下几个步骤 1)给定一个pdf文件. 2)读取pdf文件内容,并解析为文本内容. 3)通过给定的内容,比对pdf ...

  2. 操作PDF文件的关键技术点

    一个PDF文档从大到小可以分成如下几个要素:文档.章节.小节.段落.表格.列表. com.lowagie.text.Document表示PDF文档.必须为它创建一个PDF写入器,即com.lowagi ...

  3. 编辑方法分享之如何编辑PDF文件内容

    我们现在在工作中会经常使用到PDF文件,还会有遇到需要编辑PDF文件的时候,PDF文件的编辑问题一直是个大难题.很多朋友在面对PDF文件的时候束手无策,不知道该怎么对它进行编辑.下面小编就教给大家一个 ...

  4. 织梦中在线显示pdf文件的方法

    如何在织梦中添加pdf文件并显示呢?下面这个教程将带领大家来操作.(注:手机版无法查看) 第一步:在系统-系统基本参数-附件设置中添加pdf格式 并且将大小调大 第二步:在核心-内容模型-普通文章中添 ...

  5. C# Parsing 类实现的 PDF 文件分析器

    下载示例 下载源代码 1. 介绍 这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adob ...

  6. 利用python第三方库提取PDF文件的表格内容

    小爬最近接到一个棘手任务:需要提取手机话费电子发票PDF文件中的数据.接到这个任务的第一时间,小爬决定搜集各个地区各个时间段的电子发票文件,看看其中的差异点.粗略统计下来,PDF文件的表格框架是统一的 ...

  7. PDF 文件编写器 C# 类库(版本 1.28.0)使用详解

    PDF File Writer 是一个 C# .NET 类库,允许应用程序创建 PDF 文件. PDF File Writer C# 类库使 .NET 应用程序能够生成 PDF 文档.该库使应用程序免 ...

  8. 加密PDF文件的打印问题

    工作中遇到网上下载的PDF文件加密,并且不能打印 解决方法: 1.解密: 去网站下载解密软件,1M左右:http://www.onlinedown.net/soft/19939.htm 直接解压,运行 ...

  9. C#如何在PDF文件添加图片印章

    文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性.C#添加图片印章其实也有很多实现方法,这里我使用的是免费的第三方软件Free Spire.PDF,向大家阐述 ...

随机推荐

  1. django admin manytomany获取所选字段值

    和一般views中前端数据的获取一样. def save_model(self, request, obj, form, change):         door_id_list= request. ...

  2. Java学习JVM搞搞Jconsole呗

    无意间翻到这条博客:http://www.blogjava.net/zhvfeng/archive/2010/08/04/327956.html 这里还有个讲解的:http://www.kafka01 ...

  3. FOJ 1607 Greedy division 数学题

    题目地址: http://acm.fzu.edu.cn/problem.php?pid=1607 给定一个n,将n平均分成m份,问有几种方法,每种方法中找出最大的数.思路:就是求n的因子数.先将每个数 ...

  4. fake it till you become it

    fake it till you become it_你泛起山川烟波里的不是我._百度空间 fake it till you become it

  5. 14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量

    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量 InnoDB 使用bac ...

  6. 理解Windows内核模式与用户模式

     1.基础 执行 Windows 的计算机中的处理器有两个不同模式:"用户模式"和"内核模式". 依据处理器上执行的代码的类型,处理器在两个模式之间切换.应 ...

  7. hdu2647 逆拓扑,链式前向星。

    pid=2647">原文地址 题目分析 题意 老板发工资,可是要保证发的工资数满足每一个人的期望,比方A期望工资大于B,仅仅需比B多1元钱就可以.老板发的最低工资为888元.输出老板最 ...

  8. 【夯实基础】Spring在ssh中的作用

    尊重版权:http://blog.csdn.net/qjlsharp/archive/2009/03/21/4013255.aspx 写的真不错. 在SSH框假中spring充当了管理容器的角色.我们 ...

  9. 用代码定位硬盘上的文件(使用ShellExecute执行explorer /select命令,其它参数也很全)

    问题:如何用代码控制资源浏览器,并定位到指定的文件? 答:使用ShellExecute,配合explorer即可 ShellExecute(Application.Handle, 'open', PC ...

  10. [Windows Phone学习笔记]页面之间传递对象

    在Windows Phone中,页面之间传递参数就类似Web开发中一样,通过QueryString的形式进行传递,但是如果需要传递对象,则无法通过QueryString形式了,其实也可以,把对象序列化 ...