查看图片大小色度等信息的命令 identify

安装 ImageMagick 包后会有一个命令

identify

使用该命令即可查看图片详情。

例如:

identify example.png

输出类似如下:

example.png PNG 1020×2754 1020×2754+0+0 8-bit sRGB 750KB 0.000u 0:00.000

如果想看更加详细的输出,则加上 -verbose 选项:

identify -verbose example.png

输出比较多:

Image: example.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 1020×2754+0+0
Resolution: 28.35×28.35
Print size: 35.9788×97.1429
Units: PixelsPerCentimeter
Type: TrueColorAlpha
Endianess: Undefined
Colorspace: sRGB
Depth: 8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
alpha: 1-bit
Channel statistics:
Pixels: 2809080
Red:
min: 0 (0)
max: 255 (1)
mean: 204.674 (0.802644)
standard deviation: 81.414 (0.319271)
kurtosis: 0.239677
skewness: -1.38498
Green:
min: 0 (0)
max: 255 (1)
mean: 207.794 (0.81488)
standard deviation: 79.2734 (0.310876)
kurtosis: 0.665358
skewness: -1.53063
Blue:
min: 0 (0)
max: 255 (1)
mean: 210.003 (0.823541)
standard deviation: 78.877 (0.309322)
kurtosis: 0.861659
skewness: -1.61903
Alpha:
min: 255 (1)
max: 255 (1)
mean: 255 (1)
standard deviation: 0 (0)
kurtosis: 0
skewness: 0
Image statistics:
Overall:
min: 0 (0)
max: 255 (1)
mean: 155.618 (0.610266)
standard deviation: 69.163 (0.271228)
kurtosis: 6.56095
skewness: -2.02349
Rendering intent: Perceptual
Gamma: 0.454545
Chromaticity:
red primary: (0.64,0.33)
green primary: (0.3,0.6)
blue primary: (0.15,0.06)
white point: (0.3127,0.329)
Background color: white
Border color: srgba(223,223,223,1)
Matte color: grey74
Transparent color: none
Interlace: None
Intensity: Undefined
Compose: Over
Page geometry: 1020×2754+0+0
Dispose: Undefined
Iterations: 0
Compression: Zip
Orientation: Undefined
Properties:
date:create: 2015-03-16T16:31:31+08:00
date:modify: 2015-03-16T16:31:31+08:00
png:IHDR.bit-depth-orig: 8
png:IHDR.bit_depth: 8
png:IHDR.color-type-orig: 6
png:IHDR.color_type: 6 (RGBA)
png:IHDR.interlace_method: 0 (Not interlaced)
png:IHDR.width,height: 1020, 2754
png:pHYs: x_res=2835, y_res=2835, units=1
png:sRGB: intent=0 (Perceptual Intent)
signature: 6a369e9590b4ae45f4fde49cf23b5c60b1ab3e71a5f90e31e8bd88277f527c6b
Artifacts:
filename: example.png
verbose: true
Tainted: False
Filesize: 750KB
Number pixels: 2.809M
Pixels per second: 25.54MB
User time: 0.100u
Elapsed time: 0:01.109
Version: ImageMagick 6.8.9-8 Q16 x86_64 2014-10-23 http://www.imagemagick.org

附上不同系统安装 ImageMagick 的命令:

yum install ImageMagick # CentOS
apt-get install ImageMagick # Debian/Ubuntu
brew install ImageMagick # Mac with brew

 

Mac OS X 编辑状态下可用快捷键

  1. 跳至行首 – Control+A
  2. 跳至行尾 – Control+E
  3. 跳至下一行 – Control+N
  4. 跳至上一行 – Control+P
  5. 删除上一个单词 – Control+W
  6. 删除当前光标位置到行首的文字 – Control+U
  7. 删除当前光标位置到行尾的文字 – Control+K

用于命令行中剪切和粘贴的快捷键:

命令行拥有独特的剪切和粘贴方式,称为“kill”和“yank”:

  1. 剪切当前光标位置到行首的文字 – Control+U
  2. 剪切当前光标位置到行尾的文字 – Control+K
  3. 在光标当前位置粘贴最近一次剪切的内容 – Control+Y

给所有人发放优惠券设计方案

目前在一家海外电商平台网站工作,我们有一个给会员送优惠券的功能,用户在下订单后可以使用优惠券享受一些相应的折扣,比如减价打折什么的。

在我们后台运营系统中,我们需要按照用户ID给指定用户发放优惠券,也需要对全体会员发放优惠券。给指定用户发放优惠券便是在相应表里插入对应记录,里面有字段 user_id,以及 discount_id 分别为用户和优惠券,最初给所有用户发放优惠券的设计方案是插入 user_id 为 0 的记录,表示这张优惠券发放给所有用户。这种方案是最直接也比较好理解的方案,但后来发现者并不是很好的设计,后来发现代码里面到处散落着对 user_id = 0 的判断,使得代码复杂了不少。还有一个问题就是,优惠券记录表里面还记录这优惠券使用时间,优惠券使用次数等数据,当我们用 user_id = 0 这个的设计后,这些数据就没法记录了。

后来着手优化给所有人发放优惠券,有同事提出,当给所有人发放优惠券时直接粗暴地遍历所有用户,每人都发放一张优惠券。但这种设计显然不合理,假设我们有 10 万用户,每次给所有人发放优惠券则一次插入 10 万条记录,太恐怖了,就是 10 万时还 OK,当用户数达到百万级别了呢。

我又想到,给所有人发放优惠券不一定需要立刻就在数据库里面插入该用户的记录,我们只需要在用户登录的时候把那条记录给他插入进去就好了。这样处理就将发放优惠券的时间打散在每个用户登录时。达到了给所有用户发放优惠券的目的同时不需要一下子就插入 10 万条记录。就是这样一个方案,我们后来又进行改进,因为考虑到,假设用户15点登录了网站,我们15点1分发放优惠券,这样用户也看不到他的优惠券,因为他没有再登录。最终我们的方案是,当去获取用户拥有的优惠券时,我们先同步一下发放给所有人的优惠券(检查到有发放给所有人的券,则发放给该用户并做记录,做记录是为了去重防止每次都去给用户发放相同的优惠券)到用户的优惠券里面。目前运行 OK。

就在我写这篇博客的时候,我又想到,user_id = 0 的设计其实也是可行的,只不过我们需要把用户拥有的优惠券和用户使用优惠券的使用记录分开另外用一张表来存储,实际上,这种方式才是合理的。

解决 oh-my-zsh 中文乱码

今天尝试使用 oh-my-zsh,按照 github 上的说明:

curl -L http://install.ohmyz.sh | sh

进行安装完成后,运行 ls 发现中文文件名是乱码。搜索了一番,在 ~/.zshrc 文件末尾加入下面两行:

export LC_ALL=en_US.UTF-8  
export LANG=en_US.UTF-8

重启终端,或者运行

source ~/.zshrc

就 OK 了。