[練習] 用PYTHON來最佳化網站中的圖片

來源:互聯網
上載者:User

我到公司以來,第一次加班,哇,加一晚上加一上午,現在還沒下班的跡象,555,困。

 

對於網站中的一些關鍵的頁面,多重緩衝、靜態化、程式碼最佳化……之外,為了提高使用者開啟頁面的速度,圖片是必須要最佳化的。

 

如何最佳化呢,其實手工最佳化也絕對是值得的,也是最好的方法,但是我寫了一個小指令碼,與其說這個指令碼的作用是最佳化圖片,

不如說是給出一個參考,就是經過圖片最佳化,可以減少網頁多大的體積。

 

那指令碼是如何工作呢,原理簡單,大致是找到所有要最佳化的檔案,用Pil庫另存到本目錄下的bak檔案夾中,這個檔案夾要自己先建好哦。

然後統計檔案大小,給出結果,所以說這個指令碼是“安全”的。任你運行多次,不會真正會改圖片,只會把同名檔案產生到相應的bak檔案中。

 

代碼如下:

 

 


#!/usr/bin/python
#-*-coding:utf-8-*-
#Filenam: pic_smaller.py
#Author zhangyufeng_zz

import os, sys
import Image

error_log  = ['']
size_count = 0
##############################################
def get_new_one(pic):
    global error_log
    try:
        im = Image.open(pic)
        print pic, im.format, im.size, im.mode
#   im.show() 
        if(im.format == 'JPEG'):
            im.save("bak/" + pic)
    finally:
        error_log.append(pic)
        
##############################################

##############################################
def get_file_size_string(file1 , file2):
    global error_log, size_count 
    if(not os.path.isfile(file1)) or (not os.path.isfile(file2)):
        return 0
    try:
        f1 = os.path.getsize(file1)
        f2 = os.path.getsize(file2)
        size_count += f1 - f2
        f  = '%s \t-> \t%s\t%dKB*%dKB \t\t = \t %d KB'%(file1, file2, f1/1024, f2/1024, (f1-f2)/1024)
        print f
    finally:
        error_log.append('no')
##############################################

# main
all     =  os.listdir('.')
pics    = []
formats = ['jpg', 'png', 'JPG' , 'PNG']

for file in os.listdir('.'):
    if os.path.isfile(file):
        for fr in formats:
            if file.find(fr) > 0:
                pics.append(file)
                
for pic in pics:
    get_new_one(pic)
    get_file_size_string(pic , 'bak/' + pic)
    

print size_count/1024 , 'KB'

 

代碼很簡單,而且只是利用了pil的預設圖片品質,關於圖片的品質,我還沒找到調整的方法。

 

為了感謝來這裡看我發這麼爛的文章的人,我“鄭重”推出我自戀的最“雷人工具”----查看部落格園排名的指令碼 —_—!

 

#!/usr/bin/python
#-*-coding:utf-8-*-
#Filenam: get_cnblogs.py
#Author zhangyufeng_zz
import os
import sys
import re
from urllib import urlopen
string = urlopen("http://www.cnblogs.com/AllBloggers.aspx").read()

#file_object = open('string.txt')
#--------------------------------------------------
# try:
#   string = file_object.read()
# finally:
#   file_object.close()
#-------------------------------------------------- 

usr_name    = 'amboyna'
url         = "http://www.cnblogs.com"

usr_length = len(usr_name)
i = string.count(usr_name)
r = string.find(usr_name)
usr_string  = string[r - 60 : r + 50]

name_s      = usr_string.find(usr_name + "/\">") + len(usr_name) + 3
name_e      = usr_string.find("</a>&nbsp;")
name        = usr_string[name_s  : name_e ]

small_s     = usr_string.find('<small>')
small_e     = usr_string.find('.&nbsp;')
no = usr_string[small_s + 7 : small_e]

http_s      = usr_string.find(url)
http        = usr_string[ http_s : http_s + len(url) + usr_length + 1 ]

print '\n'
print '----------------------------------'
print 'ID:\t' , usr_name
print 'NAME:\t' , name
print 'NO.:\t' , no
print 'URL:\t' , http
print '----------------------------------\n'
                                                                                 

 

把usr_name 改成你的使用者名稱就成,附:我不是不會正則,我看了半晌python的文檔,沒找到如何使用正則的方法,如果哪位大大很明白,請回複一下啊,謝謝。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.