ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

编程干货|Python最实用的四个处理图形场景

2021-07-23 19:02:20  阅读:220  来源: 互联网

标签:Python image 编程 list width 干货 np grad 图片


前言

Python是一款非常适合不懂代码的小白们去探索和学习的语言,因为他的功能非常多,几乎无所不能,能极大的增加小白对编程的兴趣。

Python在实现某个技术的时候可能不是最合适的,但可能是最简洁,最能被大众所接受的。

今天奋斗君给大家推荐几个用python处理图像的案例,加上源码大家可以直接拿去使用!

虽然这些案例的效果很多手机软件也能实现,但是python的优势就在于它的定制化更强,还可以批量生产。

生成手绘图偏

这里用到了pillow,pillow是python一个强大方便的图像处理库

原图:

 生成手绘后:

源码:
# -*- coding: UTF-8 -*-
from PIL import Image
import numpy as np
 
# 原始图片路径
original_image_path = "E:\\图片\\F22.jpg"
# 要生成的手绘图片路径,可自定义
handdrawn_image_path = "E:\\图片\\F22-手绘.jpg"
 
# 加载原图,将图像转化为数组数据
a=np.asarray(Image.open(original_image_path).convert('L')).astype('float')
depth=10.
 
#取图像灰度的梯度值
grad=np.gradient(a)
 
#取横纵图像梯度值
grad_x,grad_y=grad
grad_x=grad_x*depth/100.
grad_y=grad_y*depth/100.
A=np.sqrt(grad_x**2+grad_y**2+1.)
uni_x=grad_x/A
uni_y=grad_y/A
uni_z=1./A
 
#光源的俯视角度转化为弧度值
vec_el=np.pi/2.2
 
#光源的方位角度转化为弧度值
vec_az=np.pi/4.
 
#光源对x轴的影响
dx=np.cos(vec_el)*np.cos(vec_az)
dy=np.cos(vec_el)*np.sin(vec_az)
dz=np.sin(vec_el)
 
#光源归一化,把梯度转化为灰度
b=255*(dx*uni_x+dy*uni_y+dz*uni_z)
 
#避免数据越界,将生成的灰度值裁剪至0-255内
b=b.clip(0,255)
 
#图像重构
im=Image.fromarray(b.astype('uint8'))
 
print('完成')
im.save(handdrawn_image_path)

生成词云图

词云图过滤掉大量的文本信息,利用好词云图可以使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

Wordcloud是Python专属的制作词云库,能自定义颜色和形状。

比如我用Wordcloud随机生成的一张词云图:

 

源码:
def wordCloudImage(wordlist,width,height,bgcolor,savepath):
    # 可以打开你喜欢的词云展现背景图
    # cloud_mask = np.array(Image.open('nezha.png'))
    # 定义词云的一些属性
    wc = WordCloud(
        width=width,  # 图幅宽度 900
        height=height,  # 图幅高度 3000
        background_color=bgcolor,  # 背景图分割颜色为白色 "black"
        # mask=cloud_mask,  # 背景图样
        max_words=300,  # 显示最大词数
        font_path='./fonts/simhei.ttf',  # 显示中文
        collocations=False,
        # min_font_size=5,  # 最小尺寸
        # max_font_size=100,  # 最大尺寸
    )
 
    # wordfile是分词后的词汇列表
    x = wc.generate(wordlist)
    # 生成词云图片
    image = x.to_image()
    # 展示词云图片
    image.show()
    # savepath是图片保存地址,保存词云图片
    wc.to_file(savepath)

生成微信九宫格

微信九宫格曾经也刷爆过朋友圈,其实我们的python也可以制作,而且只需要几十行代码就可以实现。

 

源码
# 朋友圈九宫格图片制作
# encoding=utf-8
from PIL import Image
import sys
 
 
# 先将input image 填充为正方形
def fill_image(image):
    width, height = image.size
    # 选取原图片长、宽中较大值作为新图片的九宫格半径
    new_image_length = width if width > height else height
    # 生产新图片【白底】
    new_image = Image.new(image.mode, (new_image_length, new_image_length), color='white')
    # 将原图粘贴在新图上,位置为居中
    if width > height:
        new_image.paste(image, (0, int((new_image_length - height) / 2)))
    else:
        new_image.paste(image, (int((new_image_length - width) / 2), 0))
    return new_image
 
 
# 将图片切割成九宫格
def cut_image(image):
    width, height = image.size
    # 一行放3张图
    item_width = int(width / 3)
    box_list = []
    for i in range(0, 3):
        for j in range(0, 3):
            box = (j * item_width, i * item_width, (j + 1) * item_width, (i + 1) * item_width)
            box_list.append(box)
    image_list = [image.crop(box) for box in box_list]
    return image_list
 
 
# 保存图片
def save_images(image_list):
    index = 1
    for image in image_list:
        image.save('e:\\图片\\'+str(index) + '.png', 'PNG')
        index += 1
 
 
if __name__ == '__main__':
    file_path = "e:\\图片\\F22.jpg"
    image = Image.open(file_path)
    # image.show()
    image = fill_image(image)
    image_list = cut_image(image)
    print(len(image_list))
    save_images(image_list)

生成背景二维码

相信大家都见过这种炫酷又漂亮的二位码吧,现在能生成这种二位码的工具很多,python其实也是一种选择。(扫码有惊喜哦!)

 

使用pip安装myqr,非常简单。

该库可以在命令行中运行,你只需要传递网址链接、图片地址等参数,就可以生成相应的二维码,二维码图片默认保存在当前目录下面。

命令行输入格式:

myqr 网址链接

比如:

myqr https://zhuanlan.zhihu.com/pydatalysis

再按enter键执行,就能生成对应链接的二维码了。

怎么融合图片呢?很简单,传入图片地址参数'-p'

比如说我C盘有一张星空的图片,地址是:d:\XK.jpg即传入参数'-pd:\XK.jpg'在命令行键入:

myqr https://zhuanlan.zhihu.com/pydatalysis -p d:\XK.jpg -c

执行就能生成上图的星空主题二维码了。

该库可以在命令行中运行,你只需要传递网址链接、图片地址等参数,就可以生成相应的二维码,二维码图片默认保存在当前目录下面。

结语

今天的分享就到这结束了,python其实还有很多好玩的图形处理,大家可以多去研究,如果有喜欢我的文章的小伙伴可以一健三连哦!我会不断的努力更新更优质的内容!

标签:Python,image,编程,list,width,干货,np,grad,图片
来源: https://blog.csdn.net/luuuu88/article/details/119042191

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有