zoukankan      html  css  js  c++  java
  • Python18行代码做出来这样有点浪漫,又有点极客的“内涵”图

    今天就来教大家这个套路:

    如何使用 Python 来做出来这样有点浪漫,又有点极客的“内涵”图。

    当然,能不能靠它得到心仪对象的青睐,就要靠你(命)了。(๑•́₃ •̀๑)

    那么要怎么做呢?

    很多人学习python,不知道从何学起。
    很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
    很多已经做案例的人,却不知道如何去学习更加高深的知识。
    那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
    QQ群:1097524789

    我们先找一张女神的高清图片(尽量分辨率高点的吧,效果会好点)。这里以一张原图是这样的(分辨率是:3840*2160)。

    使用我写好的脚本运行后,就生成了这样一张图,请你点击,放大再放大。惊喜?

    然后将这张图片发给你的女神,具体话术你自己想咯

    好吧,相比女神来说,你可能更在意这是如何实现的。

    其实原理很简单,代码也还不到 20 行。

    首先,来讲讲原理。

    事实上,每一张图片都是由一个一个的像素点所组成的。而每个像素点,都有自己的颜色,其颜色可以用一个数组来表示:(a,b,c),其中每位数的取值范围都是 0-255。

    比如(0,0,0)代表黑色,(255,255,255)代表白色。

    当像素点足够多的时候,这张照片就是我们所说的高清照片。

    而如果当像素点太少,我们的肉眼就能感知到明显的锯齿感。

    用 Excel 画了个图,每一方格代表一个像素,其中若我的字体的大小设置 5(非字号5,而是每个字占用5个像素),效果大概就是如下这样子。

    我只要每个像素取出一个像素值,并使用这个像素做为该字的颜色即可,在像素量够多的情况下,从远处看,是能看到我们原来图像的轮廓的。

    有了思路,就可以开始我们的代码。

    首先,我们需要用到 PIL库,使用其中的 PIL.Image 读取图像,并使用 load 方法获取到每一个像素值。

    img_raw = Image.open(img_path)
    img_array = img_raw.load()

    然后新建一张画布,并选好你要使用的字体和字体大小(这里要确保路径下的字体文件是存在的)。

    img_new = Image.new("RGB", img_raw.size, (0, 0, 0))
    draw = ImageDraw.Draw(img_new)
    font = ImageFont.truetype('C:WindowsFontsSTHUPO.TTF', font_size)

    由于需要不断循环 “我喜欢你!”,这五个字符。所以这里可以while循环 yield 来实现一个生成器。

    def character_generator(text):
        while True:
            for i in range(len(text)):
                yield text[i]

    最后,要给这些字加上相应的颜色,写入新创建的画布中。

    for y in range(0, img_raw.size[1], font_size):
        for x in range(0, img_raw.size[0], font_size):
            draw.text((x, y), next(ch_gen), font=font, fill=img_array[x, y], direction=None)

    最后将成品保存

    img_new.convert('RGB').save("123.jpg")

    完整代码如下,供你参考

    from PIL import Image, ImageDraw, ImageFont
    
    font_size = 7
    text = "我喜欢你!"
    img_path = "321.jpg"
    
    img_raw = Image.open(img_path)
    img_array = img_raw.load()
    
    img_new = Image.new("RGB", img_raw.size, (0, 0, 0))
    draw = ImageDraw.Draw(img_new)
    font = ImageFont.truetype('C:C:WindowsFontsSTHUPO.TTF', font_size)
    
    def character_generator(text):
        while True:
            for i in range(len(text)):
                yield text[i]
    
    ch_gen = character_generator(text)
    
    for y in range(0, img_raw.size[1], font_size):
        for x in range(0, img_raw.size[0], font_size):
            draw.text((x, y), next(ch_gen), font=font, fill=img_array[x, y], direction=None)
    
    img_new.convert('RGB').save("123.jpg")

    如果你想在自己的电脑上运行,只要复制上面这段代码,保存为 python 文件(例如 draw.py),在代码编辑器或者命令行中运行即可。

    需要注意的几点是:

    1. 要安装 PIL 库。需要注意的是,这个模块名叫做 PIL,但现在已经不更新了,我们需要用另一个替代库:pillow。可以在命令行通过 pip install pillow 安装。

    2. 将你的原始图片跟代码放在同一个目录,并修改文件中的图像文件名。

    3. 字体可以自行更改,但要确保是中文字体,并且字体文件的路径正确。

  • 相关阅读:
    快速幂模板
    ACM大一寒假集训week1.2
    ACM大一寒假集训week1.1
    Gym
    Gym
    大学ACM第八周心得
    大学ACM第六周心得(11.29)
    大学ACM第五周心得
    大学ACM第四周心得
    大学ACM第三周心得
  • 原文地址:https://www.cnblogs.com/shann001/p/13255554.html
Copyright © 2011-2022 走看看