最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python語言實(shí)現(xiàn)將圖片轉(zhuǎn)化為html頁面

 更新時(shí)間:2017年12月06日 16:31:18   作者:woider  
這篇文章主要介紹了Python實(shí)現(xiàn)將圖片轉(zhuǎn)化為html頁面,具有一定參考價(jià)值,需要的朋友可以了解下。

PIL 圖像處理庫

PIL(Python Imaging Library) 是 Python 平臺(tái)的圖像處理標(biāo)準(zhǔn)庫。不過 PIL 暫不支持 Python3,可以用 Pillow 代替,API是相同的。

安裝 PIL 庫

如果你安裝了 pip 的話可以直接輸入 pip install PIL 命令安裝 Pillow。

或者在 PyCharm 中打開 [File] >> [settings] >> [project github] >> [project interpreter] 添加標(biāo)準(zhǔn)庫:

↑ 搜索 Pillow 包,選中 Pillow,點(diǎn)擊 Install Package 安裝

PIL 使用方法

from PIL import Image

img = Image.open('source.jpg') # 打開圖片
width, height = img.size # 圖片尺寸

img.thumbnail((width / 2, height / 2)) # 縮略圖
img = img.crop((0, 0, width / 2, width / 2)) # 圖片裁剪
img = img.convert(mode='L') # 圖片轉(zhuǎn)換
img = img.rotate(180) # 圖片旋轉(zhuǎn)
img.save('output.jpg') # 保存圖片

↑ PIL 常用模塊:Image, ImageFilter, ImageDraw, ImageFont, ImageEnhance, ImageFilter...

圖片處理過程

圖片轉(zhuǎn)換成網(wǎng)頁的過程,可以分成五個(gè)步驟。首先要選擇一個(gè)合適的HTML模板,控制好字體的大小和字符間的間距。

然后通過 Python 的 網(wǎng)絡(luò)訪問模塊,根據(jù)URL獲取圖片。接著使用 PIL 模塊載入二進(jìn)制圖片,將圖片壓縮到合適的尺寸。

遍歷圖片的每一個(gè)像素,得到該像素的顏色值,應(yīng)用到HTML的標(biāo)簽上。最后把字符串信息輸出到文件中,生成HTML文檔。

定制模板

TEMPLATE = '''
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>{title}</title>
  <style>
    body {{
      line-height: 1em;
      letter-spacing: 0;
      font-size: 0.6rem;
      background: black;
      text-align: center;
    }}
  </style>
</head>
<body>
  {body}
</body>
</html>
'''

↑ 大括號(hào)代表一個(gè)占位符,最后會(huì)被替換成實(shí)際內(nèi)容,雙大括號(hào)中的內(nèi)容則不會(huì)被替換。

獲取圖片

from urllib import request
url = 'https://pic.cnblogs.com/avatar/875028/20160405220401.png'
binary = request.urlopen(url).read()

↑ 通過 URL 得到 byte 數(shù)組形式的圖片。

處理圖片

from PIL import Image
from io import BytesIO
img = Image.open(BytesIO(binary))
img.thumbnail((100, 100)) # 圖片壓縮

↑ byte 類型的 圖片需要通過 BytesIO 轉(zhuǎn)換為 string 類型,才能被 PIL 處理。

生成HTML

piexl = img.load() # 獲取像素信息
width, height = img.size # 獲取圖像尺寸
body, word = '', '博客園'
font = '<font color="{color}">{word}</font>'
for y in range(height):
  for x in range(width):
    r, g, b = piexl[x, y] # 獲取像素RGB值
    body += font.format(
      color='#{:02x}{:02x}{:02x}'.format(r, g, b),
      word=word[((y * width + x) % len(word))]
    )
  body += '\n<br />\n'

↑ 使用<font>標(biāo)簽包裹文字,并根據(jù)相應(yīng)像素的RGB值,設(shè)置<font>標(biāo)簽的color屬性。

導(dǎo)出網(wǎng)頁

html = TEMPLATE.format(title=word, body=body)
fo = open('index.html', 'w', encoding='utf8')
fo.write(html)
fo.close()

↑向HTML模板中填充處理完成的數(shù)據(jù),使用文件流將字符串以u(píng)tf8格式輸出到文檔。

img2html

wo把上面五個(gè)步驟封裝了起來,這樣一來就可以很方便的調(diào)用了。

from io import BytesIO
from PIL import Image
from PIL import ImageFilter
from urllib import request

TEMPLATE = '''
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>{title}</title>
  <style>
    body {{
      line-height: 1em;
      letter-spacing: 0;
      font-size: 0.6rem;
      background: black;
      text-align: center;
      min-width: {size}em;
    }}
  </style>
</head>
<body>
  {body}
</body>
</html>
'''
class Converter(object):
  def __init__(self, word='田', size=100):
    self.word, self.size = word, size
    self.font = '<font color="{color}">{word}</font>'

  # 讀取url內(nèi)容
  def __network(self, url):
    return request.urlopen(url).read()

  # 處理圖片信息
  def __handle(self, binary):
    img = Image.open(BytesIO(binary)) # 打開制圖片
    img.thumbnail((self.size, self.size)) # 壓縮圖片
    img.filter(ImageFilter.DETAIL) # 圖片增強(qiáng)
    return img

  # 分析圖片像素
  def __analysis(self, img):
    body = ''
    piexls = img.load()
    width, height = img.size
    for y in range(height):
      for x in range(width):
        r, g, b = piexls[x, y]
        body += self.font.format(
          color='#{:02x}{:02x}{:02x}'.format(r, g, b),
          word=self.word[((y * width + x) % len(self.word))]
        )
      body += '\n<br />\n'
    return body
  # 寫入文件內(nèi)容
  def __writefile(self, file, str):
    fo = open(file, 'w', encoding='utf8')
    try:
      fo.write(str)
    except IOError:
      raise Exception
    finally:
      fo.close()

  # 生成html文檔
  def buildDOC(self, url, output):
    try:
      binary = self.__network(url)
      img = self.__handle(binary)
      html = TEMPLATE.format(
        title=self.word,
        body=self.__analysis(img),
        size=self.size
      ) # 向模板中填充數(shù)據(jù)
      self.__writefile(output, html)
    except Exception as err:
      print('Error:', err)
      return False
    else:
      print('Successful!')
      return True

導(dǎo)入 img2html.Converter,調(diào)用 buildDOC(url, out) 方法

from img2html import Converter
conv = Converter('卷福', 120)
url = 'http://www.sznews.com/ent/images/attachement/jpg/site3/20140215/001e4f9d7bf91469078115.jpg'
out = 'index.html'
conv.buildDOC(url, out)

↑ 程序會(huì)在當(dāng)前目錄生成 index.html 文件,需要用瀏覽器打開后才可以看到效果。

轉(zhuǎn)換效果

原始圖片 輸出HTML

總結(jié)

以上就是本文關(guān)于Python實(shí)現(xiàn)將圖片轉(zhuǎn)化為html頁面的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!

相關(guān)文章

  • python中的多線程鎖lock=threading.Lock()使用方式

    python中的多線程鎖lock=threading.Lock()使用方式

    這篇文章主要介紹了python中的多線程鎖lock=threading.Lock()使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Python爬蟲實(shí)現(xiàn)百度翻譯功能過程詳解

    Python爬蟲實(shí)現(xiàn)百度翻譯功能過程詳解

    這篇文章主要介紹了Python爬蟲實(shí)現(xiàn)百度翻譯功能過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 三分鐘教會(huì)你用Python+OpenCV批量裁剪xml格式標(biāo)注的圖片

    三分鐘教會(huì)你用Python+OpenCV批量裁剪xml格式標(biāo)注的圖片

    最近學(xué)習(xí)網(wǎng)絡(luò)在線課程的過程中,為了方便課后復(fù)習(xí),使用手機(jī)截取了大量的圖片,下面這篇文章主要給大家介紹了如何通過三分鐘教會(huì)你用Python+OpenCV批量裁剪xml格式標(biāo)注圖片的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Python 通過監(jiān)聽端口實(shí)現(xiàn)唯一腳本運(yùn)行方式

    Python 通過監(jiān)聽端口實(shí)現(xiàn)唯一腳本運(yùn)行方式

    這篇文章主要介紹了Python 通過監(jiān)聽端口實(shí)現(xiàn)唯一腳本運(yùn)行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python opencv實(shí)現(xiàn)圖像配準(zhǔn)與比較

    python opencv實(shí)現(xiàn)圖像配準(zhǔn)與比較

    這篇文章主要為大家詳細(xì)介紹了python opencv實(shí)現(xiàn)圖像配準(zhǔn)與比較,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-02-02
  • 關(guān)于flask路由app.route及路由參數(shù)的各種用法解析

    關(guān)于flask路由app.route及路由參數(shù)的各種用法解析

    我們?cè)陂_發(fā)過程中,編寫項(xiàng)目時(shí)所使用的路由往往是指代了框架/項(xiàng)目中用于完成路由功能的類,這個(gè)類一般就是路由類,簡(jiǎn)稱路由,這篇文章主要介紹了有關(guān)flask路由app.route及路由參數(shù)的各種用法解析,需要的朋友可以參考下
    2024-03-03
  • Ubuntu下創(chuàng)建虛擬獨(dú)立的Python環(huán)境全過程

    Ubuntu下創(chuàng)建虛擬獨(dú)立的Python環(huán)境全過程

    virtualenv可以搭建虛擬且獨(dú)立的python環(huán)境,可以使每個(gè)項(xiàng)目環(huán)境與其他項(xiàng)目獨(dú)立開來,保持環(huán)境的干凈,解決包沖突問題。本篇文章講述如何在Linux以及Ubuntu中創(chuàng)建Python虛擬環(huán)境,以及Virtualenvwrapper的安裝使用,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • Python的10道簡(jiǎn)單測(cè)試題(含答案)

    Python的10道簡(jiǎn)單測(cè)試題(含答案)

    這篇文章主要介紹了Python的10道簡(jiǎn)單測(cè)試題(含答案),學(xué)習(xí)了一段時(shí)間python的小伙伴來做幾道測(cè)試題檢驗(yàn)一下自己的學(xué)習(xí)成果吧
    2023-04-04
  • python對(duì)list中的每個(gè)元素進(jìn)行某種操作的方法

    python對(duì)list中的每個(gè)元素進(jìn)行某種操作的方法

    今天小編就為大家分享一篇python對(duì)list中的每個(gè)元素進(jìn)行某種操作的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python 兩個(gè)數(shù)據(jù)庫postgresql對(duì)比

    python 兩個(gè)數(shù)據(jù)庫postgresql對(duì)比

    這篇文章主要介紹了python 兩個(gè)數(shù)據(jù)庫postgresql對(duì)比,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論

喀喇沁旗| 绥德县| 肃北| 来安县| 白山市| 永定县| 乌恰县| 巴彦县| 濮阳县| 治县。| 津市市| 广南县| 丹凤县| 宣威市| 成都市| 重庆市| 安顺市| 清新县| 罗山县| 安阳县| 兴隆县| 商丘市| 正镶白旗| 陇川县| 满洲里市| 广丰县| 孝感市| 襄樊市| 二手房| 五寨县| 佛山市| 沙湾县| 邢台县| 金山区| 东山县| 屯门区| 东辽县| 东明县| 庆城县| 台江县| 砀山县|