PS腳本篇--2.圖片尺寸重設,你瞭解多少?


1、圖片尺寸重設

這篇要解決一個問題:從新採樣 的各個配置,有什麼不一樣如何?
activeDocument對象在全局對象app中,但能夠直接使用,就像瀏覽器中document之於windownode

1.從新設置圖片尺寸:activeDocument.resizeImage

/**
 * 從新設置圖片大小
 * @param width 寬度 number
 * @param height 高度 number
 * @param resolution 分辨率 number
 * @param resampleMethod 從新採樣模式 {@link ResampleMethod}
 * @param amount 減小雜色 number  0 - 100
 */
resizeImage: function (width, height, resolution, resampleMethod, amount) {
},

ResampleMethod = { //從新採樣模式
    AUTOMATIC: "自動",
    BICUBIC: "兩次立方",
    BICUBICAUTOMATIC: "兩次立方自動",
    BICUBICSHARPER: "兩次立方(較銳利)(縮減)",
    BICUBICSMOOTHER: "兩次立方(較平滑)(擴大)",
    BILINEAR: "兩次線性",
    NEARESTNEIGHBOR: "鄰近(硬邊緣)",
    PRESERVEDETAILS: "保留細節(擴大)",
    NONE: "無"
};
複製代碼

2.封裝一個簡單的方法
obj = {
    path: "K:\\圖片素材\\head\\",//文件夾
    name: "wy.jpg",
    config: {
        width: 200,
        height: 200,
        dpi: 72,
        ResampleMethod: ResampleMethod.BICUBIC,
    }
};

resizeFile(obj,"res-");

/**
 * 從新修改一個圖片的尺寸
 * @param obj 對象
 * @param fix 前綴
 */
function resizeFile(obj, fix) {
    var img = File(obj.path + obj.name);
    var outName = obj.path + fix + obj.name;//輸出名
    open(img);
    var config = obj.config;
    if (config.ResampleMethod === ResampleMethod.NONE) {
        activeDocument.resizeImage(config.width, config.height);
    } else {
        activeDocument.resizeImage(config.width, config.height, config.dpi, config.ResampleMethod);
    }
    activeDocument.saveAs(File(outName), JPEGSaveOptions, true, Extension.LOWERCASE);
    activeDocument.close(SaveOptions.DONOTSAVECHANGES)
}
複製代碼

3.省力的for循環

models = [ResampleMethod.BICUBIC,//從新採樣模式
    ResampleMethod.AUTOMATIC,
    ResampleMethod.BICUBIC,
    ResampleMethod.BICUBICAUTOMATIC,
    ResampleMethod.BICUBICSMOOTHER,
    ResampleMethod.BICUBICSHARPER,
    ResampleMethod.BILINEAR,
    ResampleMethod.NEARESTNEIGHBOR,
    ResampleMethod.PRESERVEDETAILS,
    ResampleMethod.NONE
];

for (var i = 0; i < models.length; i++) {
    obj.config.ResampleMethod = models[i];
    var fix = obj.config.ResampleMethod.toString().split(".")[1] + "-";
    resizeFile(obj, fix);
}
複製代碼

2、數據分析

想了一下用node仍是python呢? 仍是python吧,分析起來方便些python

1.採樣模式的選擇對輸出大小的影響

爲了方便說明,這裏用matplotlib把數據輸出一下web

import os
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

class Datas:
    def __init__(self, names=[], sizes=[], ratio=1.0):
        self.names = names
        self.sizes = sizes
        self.ratio = ratio

def path2name(path):
    return os.path.basename(path).split("-")[0]

def get_data(path):
    datas = Datas()
    paths = scan(path)
    datas.names = map(path2name, paths)
    datas.ratio = 4 / 9
    for path in paths:
        size = os.stat(path).st_size
        size_kb = size / 1024
        datas.sizes.append(size_kb)
    return datas

# 獲取文件夾中的文件
def scan(dir):
    res = []
    if os.path.exists(dir):
        lists = os.listdir(dir)
        for i in range(0, len(lists)):
            sonPath = os.path.join(dir, lists[i])
            res.append(sonPath)
            if os.path.isdir(sonPath):
                scan(sonPath)
    return res

def draw_bar(labels, quants):
    font = FontProperties(fname=r"c:\windows\fonts\msyh.ttc", size=14)
    width = 0.5
    ind = np.linspace(0, 9, 10)  # 0.5~9.5 10個樣本
    fig = plt.figure(1, figsize=(15, 5))  # 編號, 寬和高,分辨率, 背景顏色, 邊框顏色, 是否顯示邊框
    ax = fig.add_subplot(111)  # 一行一列取一塊
    ax.bar(ind, quants, width, color='green')
    ax.set_xticks(ind)
    ax.set_xticklabels(labels, )

    ax.set_ylabel('圖片大小/kB', fontproperties=font)  # y標籤
    ax.set_title('採樣模式', bbox={'facecolor': '0.8', 'pad': 5}, fontproperties=font)  # 標題
    plt.grid(True)
    plt.show()
    plt.savefig("bar.jpg")
    plt.close()

if __name__ == '__main__':
    datas = get_data(r"K:\圖片素材\head")
    draw_bar(datas.names, datas.sizes)
複製代碼

2.結果分析

作了三組數據: 
NEARESTNEIGHBOR 鄰近(硬邊緣)              的尺寸比較大
BICUBICSMOOTHER 兩次立方(較平滑)(擴大)   的尺寸比較小
複製代碼

固然一張圖片的數據並不可靠,下面又作了幾組windows

總的來看,大小差別也不是很大,NEARESTNEIGHBOR 彷佛都是最大的api


3.看一下各自的效果

感受能夠寫個拼圖的腳本,把一個文件夾的圖都拼在一塊兒,將名字寫在下面
做爲文件夾預覽圖感受挺不錯...瀏覽器


3、圖片尺寸重設

也許對設計師而言,改個尺寸就是點兩下的事,就像呼吸同樣簡單天然。 那圖片尺寸重設的根源是什麼?bash

一張100px*100px的ARGB_8888圖片來講:是由10000個像素組成的,一個像素記錄argb四種顏色信息
因此圖片 = 顏色信息的排列組合 , 顯示器能夠讀取這些信息,而後呈如今人的面前
圖片尺寸往深了說就是:在削減信息的同時保持色彩分佈的一致,這聽起來好像很厲害的樣子  

人體由不少細胞構成,細胞中記錄着不少信息,甩掉某些細胞而後變小,還能和原來長得同樣,正常生存  
是否是想一想就很奇妙。圖片和人類的區別在於,ps裏有一句api...

但圖片尺寸縮小意味着像素信息的丟失,不管如何,它已再也不是曾經的它
關鍵就在於像素該怎麼丟,因而幾種模式就應運而生:
複製代碼

1.NEARESTNEIGHBOR: "鄰近(硬邊緣)"

方式: 將相鄰的像素複製到新的位置,以改變像素總值。
優勢: 速度快
缺點: 不夠精確,影像邊緣粗糙不平滑,容易出現馬賽克。
適用: 細節較少,處理簡單、純色的圖像
複製代碼

2.BILINEAR: "兩次線性"

方式: 以2x2=4個像素爲基礎進行計算,替代原像素以改變像素總值。
優勢: 質量要較鄰近法好,計算速度卻接近鄰近法
缺點: 不夠精確
適用: 細節較少,處理簡單、純色的圖像
複製代碼

3.BICUBIC: "兩次立方"

方式: 以4x4個像素即16個像素的面積來計算一個新的像素,替代原像素以改變像素總值。
優勢: 結果要更爲精確,比較天然、平滑
缺點: 計算速度相對較慢
適用: 人物照等
複製代碼

4.BICUBICSMOOTHER: "兩次立方(較平滑)(擴大)"

方式: 以兩次立方法基礎爲基礎,取樣時會更注意影像色彩的漸變部分。
優勢: 結果要更爲精確,漸變動天然、平滑
缺點: 計算速度相對較慢
適用: 廣告攝影,風景,夕陽等漸變豐富、講究層次的影像中
複製代碼

5.BICUBICSHARPER: "兩次立方(較銳利)(縮減)"

方式: 以兩次立方法基礎爲基礎,取樣時會更注意影像的銳利度。
優勢: 結果要更爲精確,漸變動天然、平滑
缺點: 計算速度相對較慢
適用: 縮小
複製代碼

6.PRESERVEDETAILS: "保留細節(擴大)"

方式: 主要是減小圖片的雜色。
優勢: 圖片更加細膩
缺點: 計算速度相對較慢
適用: 精細的圖片
複製代碼

其餘幾個自動就不廢話了app


4、分別率

1.dip和ppi

記得之前寫過一篇屏幕相關的文章,這裏再說一遍,畢竟還挺重要ui

屏幕尺寸.png

ppi(Pixel Per Inch),   即每英寸的像素。
dpi(Dot Per Inch),     即每英寸的點數。
複製代碼
每英寸的像素數能難倒你嗎?
OPPO-R15X 的 ppi : 2577px/6.4in = 402.65625 px/in   約402.6ppi
OPPO-A77 的 ppi : 2202px/5.5in = 400.363... px/in   約400.4ppi
OPPO-R801 的 ppi : 576px/3.5in = 164.571... px/in   約164.6ppi
複製代碼

ppi形象一點的比喻:

一個一元硬幣直徑約1 in,如今讓一元硬幣(包括背景)等大顯示在三個手機上:spa

OPPO-R15X須要用:`402*402=161604 個像素點`  
OPPO-A77須要用:`400*400=160000 個像素點`  
OPPO-R15X須要用:`164*164=26896 個像素點`   
咱們知道像素組成了顯示的圖片,也就是說用161604個點和26896個點組成相同的畫面  
那麼26896的那個看起來效果天然要比161604的差不少,161604更加緊密,因此視覺感好
複製代碼

ppi什麼意思.png


來分析一下筆記本電腦:

筆記本屏幕分析.png

筆記本電腦 的 ppi : 21567 / 14=111.928.. px/in   約112ppi
也就是 1 in 裏有112個像素點,`1 in = 25.4mm`
人眼可視長度是0.1mm,因此你近些看能夠看到顆粒

普通的web圖片只要求72dpi就夠了,由於只是顯示在屏幕上而言 
複製代碼

打印精度:dpi
dpi又是什麼鬼,點數又是什麼鬼?---dpi稱爲打印精度

打印機將[彩色液體油墨]經噴嘴變成細小微粒噴到印紙上,一個顆粒表明1點  
dpi的意思是每英寸墨滴點數,好比300dpi的意思就是每英寸墨滴的個數爲300

300dpi 和 72dpi 的區別:
用300個點表示一個硬幣的視覺信息,和72個點表示一個硬幣的視覺信息
可想而知300的更加精細,在紙上至少要300dpi才能知足視覺要求,因此
大學時作要打印的ps產品效果圖都要把圖片的dpi調到300以上,由於須要打印

複製代碼

如今應該撥開雲霧見青天了,只在瀏覽器中dpi沒有用,px爲王 在打印的時候dpi會發揮做用: 同px的圖片dpi越大,圖片越小!圖片越小!圖片越小! 由於這樣更精細,Over,就這樣。

相關文章
相關標籤/搜索