Python实现多张图片合成文字的效果

目录
  • 前言
  • 一、图片批量下载
    • 1.下载图片
    • 2.检测图片数量
    • 3.查找相似图片
  • 二、图片马赛克
    • 1.使用photomosaic库实现图片马赛克
    • 2.计算颜色相似度实现图片马赛克

前言

前段时间看到有人问如何使用Python实现多张图片组成文字的效果?觉得还挺有意思,于是尝试做了一下,刚好赶上端午节,所以打算从网上下载1000张王心凌的照片,组成端午安康的字样,给大家送上祝福。

一、图片批量下载

首先我们需要从百度下载大量王心凌的图片,但是如果会去百度图片里一张张右键下载,但这样未免太麻烦了,所以打算直接用python写一个批量下载图片的代码,输入想要下载图片的关键字,然后输入想要下载图片的数量,就可以成功下载图片了!

代码主要分成三个部分:

  • 下载图片
  • 检测图片数量
  • 查找相似图片

1.下载图片

def dowmloadPicture(html, keyword):
    global num
    # t =0
    pic_url = re.findall('"objURL":"(.*?)",', html, re.S)  # 先利用正则表达式找到图片url
    print('找到关键词:' + keyword + '的图片,即将开始下载图片...')
    for each in pic_url:
        print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each))
        try:
            if each is not None:
                pic = requests.get(each, timeout=7)
            else:
                continue
        except BaseException:
            print('错误,当前图片无法下载')
            continue
        else:
            string = file + r'\\' + keyword + '_' + str(num) + '.jpg'
            fp = open(string, 'wb')
            fp.write(pic.content)
            fp.close()
            num += 1
        if num >= numPicture:
            return

2.检测图片数量

def Find(url, A):
    global List
    print('正在检测图片总数,请稍等.....')
    t = 0
    i = 1
    s = 0
    while t < 1000:
        Url = url + str(t)
        try:
            # 这里搞了下
            Result = A.get(Url, timeout=7, allow_redirects=False)
        except BaseException:
            t = t + 60
            continue
        else:
            result = Result.text
            pic_url = re.findall('"objURL":"(.*?)",', result, re.S)  # 先利用正则表达式找到图片url
            s += len(pic_url)
            if len(pic_url) == 0:
                break
            else:
                List.append(pic_url)
                t = t + 60
    return s

3.查找相似图片

def dowmloadPicture(html, keyword):
    global num
    # t =0
    pic_url = re.findall('"objURL":"(.*?)",', html, re.S)  # 先利用正则表达式找到图片url
    print('找到关键词:' + keyword + '的图片,即将开始下载图片...')
    for each in pic_url:
        print('正在下载第' + str(num + 1) + '张图片,图片地址:' + str(each))
        try:
            if each is not None:
                pic = requests.get(each, timeout=7)
            else:
                continue
        except BaseException:
            print('错误,当前图片无法下载')
            continue
        else:
            string = file + r'\\' + keyword + '_' + str(num) + '.jpg'
            fp = open(string, 'wb')
            fp.write(pic.content)
            fp.close()
            num += 1
        if num >= numPicture:
            return

使用效果:

二、图片马赛克

当我们下载好了所需要的王心凌的照片,下一步我们需要用这些图片组成我们需要的文字。

所以首先准备一张要拼成的图片,比如需要组成的文字,如端午安康,我们可以用 PowerPoint)制作一个喜欢的文字样式,然后保存成jpg格式。

1.使用photomosaic库实现图片马赛克

代码如下所示:

import photomosaic as pm

# 加载要拼成的图片image(jpg 格式,图片越大,得到的拼图的每个小图分辨率越高)
image = pm.imread("1.jpg", as_gray=False)
# 从指定文件夹加载图片库(需要比较多的图片才能获得较好的效果)
pool = pm.make_pool("wxl/*.jpg")
# 制作 50*50 的拼图马赛克
mosaic = pm.basic_mosaic(image, pool, (200, 200))
# 保存拼图
pm.imsave("mosaic.jpg", mosaic)

不过由于这个库版本问题,所以需要在库函数里面做一点点修改才能成才运行。

def crop_to_fit(image, shape):
    """
    Return a copy of image resized and cropped to precisely fill a shape.
    To resize a colored 2D image, pass in a shape with two entries. When
    ``len(shape) < image.ndim``, higher dimensions are ignored.
    Parameters
    ----------
    image : array
    shape : tuple
        e.g., ``(height, width)`` but any length <= ``image.ndim`` is allowed
    Returns
    -------
    cropped_image : array
    """
    # Resize smallest dimension (width or height) to fit.
    d = np.argmin(np.array(image.shape)[:2] / np.array(shape))
    enlarged_shape = (tuple(np.ceil(np.array(image.shape[:len(shape)]) *
                                    shape[d]/image.shape[d])) +
                      image.shape[len(shape):])
    resized = resize(image, enlarged_shape,
                     mode='constant', anti_aliasing=False)
    # Now the image is as large or larger than the shape along all dimensions.
    # Crop any overhang in the other dimension.
    crop_width = []
    for actual, target in zip(resized.shape, shape):
        overflow = actual - target
        # Center the image and crop, biasing left if overflow is odd.
        left_margin = int(np.floor(overflow / 2))
        right_margin = int(np.ceil(overflow / 2))
        crop_width.append((left_margin, right_margin))
    # Do not crop any additional dimensions beyond those given in shape.
    for _ in range(resized.ndim - len(shape)):
        crop_width.append((0, 0))
    cropped = crop(resized, crop_width)
    return cropped

在裁剪图片的时候输入需要是int型,所以把left_margin和right_margin强制转化成int型。

实现效果:

效果确实一般般,局部放大,可以观察出,生成图是由照片拼接而成的,所以整体大图的清晰度也与小照片的数量有关,也有可能是图片分辨率大小以及组成图片尺寸不一的原因,所以又尝试了另一种方法。

2.计算颜色相似度实现图片马赛克

def readSourceImages(sourcepath,blocksize):
    print('开始读取图像')
    # 合法图像列表
    sourceimages = []
    # 平均颜色列表
    avgcolors = []
    for path in tqdm(glob.glob("{}/*.jpg".format(sourcepath))):
        image = cv2.imread(path, cv2.IMREAD_COLOR)
        if image.shape[-1] != 3:
            continue
        image = cv2.resize(image, (blocksize, blocksize))
        avgcolor = np.sum(np.sum(image, axis=0), axis=0) / (blocksize * blocksize)
        sourceimages.append(image)
        avgcolors.append(avgcolor)
    print('结束读取')
    return sourceimages,np.array(avgcolors)

通过这个方法能够获取照片集中的每张照片与组成的大图之间颜色的相似度,将相似的照片放到对应的位置。

实现效果:

感觉效果比原来要好一些,但是还是不够清晰。

到此这篇关于Python实现多张图片合成文字的效果的文章就介绍到这了,更多相关Python多张图片合成文字内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python实现将多张图片合成视频并加入背景音乐

    实现的思路:将准备好的图片通过opencv读取出来,并将其设置好帧数等参数后合成为无声视频. 最后通过moviepy编辑视频将背景音乐加入到视频中. 开始之前还是需要说明一下非标准库的来源,因为有些库的名称和需要导入模块的名称不一定就是一样的. import os # python标准库,不需要安装,用于系统文件操作相关 import cv2 # python非标准库,pip install opencv-python 多媒体处理 from PIL import Image # python非标

  • 利用Python将多张图片合成视频的实现

    今天要做一个量子隧穿的的演示动画,在CSDN上看了很多大佬的文章,然而忙了接近半天才做好这件事.把踩过的坑记一下,同时这段代码也是值得记录的,因为以后也可能遇到类似的工作. 先上代码` import numpy as np import cv2 #读取一张图片 size = (432,288) print(size) #完成写入对象的创建,第一个参数是合成之后的视频的名称,第二个参数是可以使用的编码器,第三个参数是帧率即每秒钟展示多少张图片,第四个参数是图片大小信息 videowrite = c

  • Python实现合成多张图片到PDF格式

    目录 1.准备 2.合成原理 3.多张照片合成PDF 在日常生活中,经常会遇到需要提交身份证正反面证明资料的情况,而且这些网站大部分只接受pdf格式,这时候我们就需要把身份证正反面两张图片合成为一个pdf文件. 在macOS系统下,预览软件可以轻松做到这一点,同时打开图片到一个预览窗口下,点击导出PDF就能成功导出.但是Windows系统就没有这么方便的软件可以实现这一点,网上有很多合成PDF的网站,但是这些网站无一例外需要上传PDF进行合成,个人认为非常地不安全. 因此,最安全的方法,还是我们

  • Python实现多张图片合成一张马赛克图片

    目录 前言 开发环境 实现代码 先导入所需模块 读取图片文件 读取所有源图片并计算对应颜色平均值 合法图像列表 平均颜色列表 遍历 主函数 模块调用执行 完整效果 前言 最近有网友私信我,问如何把多张图片合成一张马赛克图片的样子 说是女儿从出生到现在,所有的照片,大概有上百张,所以想使用这些照片合成一张,当做生日礼物 那我们今天就用上次爬表情包的图片来做一次马赛克图片,2万张合成一张,想想就很激动 图片素材 4K高清原图 开发环境 Python 3.6 Pycharm 实现代码 先导入所需模块

  • python图片合成的示例

    python的PIL库简直好用的不得了,PIL下面的Image库更是封装了很多对图片处理的函数,关于Image库的介绍和使用,看这里:http://effbot.org/imagingbook/image.htm 这里用我半个月前看到的一篇博客写的demo作为背景,做一下图片的合成 图片可以看作是很多像素点组成的,每个像素点都是一个RGB颜色,(red, green, blue), 那么合成两张照片就有办法了,我们可以在一张新的RGB色的图片里一个像素点取图片一的对应位置的像素,下一个像素点取图

  • Python实现视频分解成图片+图片合成视频

    目录 一.python视频拆分+图片合成(源码一) 1.python视频拆分 2.python图片合成 二.python视频拆分+图片合成(源码二) 三.python视频拆分(源码三) 一.python视频拆分+图片合成(源码一) 1.python视频拆分 import cv2 def video2frame(videos_path,frames_save_path,time_interval): ''' :param videos_path: 视频的存放路径 :param frames_sav

  • Python实现多张图片合成文字的效果

    目录 前言 一.图片批量下载 1.下载图片 2.检测图片数量 3.查找相似图片 二.图片马赛克 1.使用photomosaic库实现图片马赛克 2.计算颜色相似度实现图片马赛克 前言 前段时间看到有人问如何使用Python实现多张图片组成文字的效果?觉得还挺有意思,于是尝试做了一下,刚好赶上端午节,所以打算从网上下载1000张王心凌的照片,组成端午安康的字样,给大家送上祝福. 一.图片批量下载 首先我们需要从百度下载大量王心凌的图片,但是如果会去百度图片里一张张右键下载,但这样未免太麻烦了,所以

  • python实现基于两张图片生成圆角图标效果的方法

    本文实例讲述了python实现基于两张图片生成圆角图标效果的方法.分享给大家供大家参考.具体分析如下: 使用pil的蒙版功能,将原图片和圆角图片进行叠加,并将圆角图片作为mask,生成新的圆角图片 from PIL import Image flower = Image.open('flower.png') border = Image.open('border.png') source = border.convert('RGB') flower.paste(source, mask=bord

  • python实现多张图片拼接成大图

    本文实例为大家分享了python实现多张图片拼接成大图的具体代码,供大家参考,具体内容如下 上次爬取了马蜂窝的游记图片,并解决了PIL模块的导入问题,现在直奔主题吧: import PIL.Image as Image import os IMAGES_PATH = 'D:\Mafengwo\photo\五月坦桑的暖风,非洲原野的呼唤\\' # 图片集地址 IMAGES_FORMAT = ['.jpg', '.JPG'] # 图片格式 IMAGE_SIZE = 256 # 每张小图片的大小 IM

  • python向企业微信发送文字和图片消息的示例

    吐槽一下企业微信的api文档真的不好读······ 企业微信本来是有功能,可以直接把图片显示到正文的,但是那个api我调用一直出错,各种折腾也没解决.后来感觉就算了,没必要,用url拼接在文字中也行,这样的好处就是以后可以换图床,不局限在企业微信内部(好像免费版一天之内可以上传200张图片,所以如果需求比较大的话可以采用第三方图床) 我把上传部分封装了一个使用新线程的方法,以防使用的时候因为上传卡住主线程(亲测如果不这样的话确实会卡住) import requests import json f

  • Python实现批量识别图片文字并存为Excel

    目录 一.背景 二.需求 三.实战 1.安装模块 2.识别一张图片 3.批量识别图片 4.保存数据 一.背景 大家好,我是J哥. 也许你还记得,前不久复旦大学一博士生写了130行Python代码,批量识别核酸截图内容的故事.当时还被人民日报公众号报道出来,夸赞用所学贡献青春力量! 其实,批量文字识别(OCR)是Python办公自动化的基本操作,应用在我们工作生活中的方方面面,比如车牌识别.证件识别.银行卡识别.票据识别等等. Python中OCR第三方库非常多,比如easyocr.PaddleO

  • iOS实现知乎和途家导航栏渐变的文字动画效果

    效果图如下 分析如下: 1.导航栏一开始是隐藏的,随着scrollView滚动而渐变 2.导航栏左右两边的navigationItem是一直显示的 3.导航栏参考了途家app,使用了毛玻璃效果,背景是一张图片 4.下拉放大图片效果 5.title文字动画效果 通过简单分析,系统的导航栏实现以上效果有点困难,直接自定义一个假的导航栏更容易点 分布拆解实现以上效果 一.下拉放大header图片 - (void)viewDidLoad { [super viewDidLoad]; [self.view

  • Python实现PS图像调整颜色梯度效果示例

    本文实例讲述了Python实现PS图像调整颜色梯度效果.分享给大家供大家参考,具体如下: 这里用 Python 实现 PS 中的色彩图,可以看到颜色的各种渐变,具体的效果可以参考附录说明 和之前的程序相比,这里利用矩阵的运算替代了 for 循环,提升了运行的效率. import numpy as np import matplotlib.pyplot as plt from skimage import io import numpy.matlib from skimage import img

  • Python使用Tkinter实现滚动抽奖器效果

    年底,抽奖这个话题很多人都会讨论,都希望可以中奖. 接下来我就使用 Python 中的 Tkinter 模块来实现一个简单的滚动抽奖器. 一.Tkinter简介 Tkinter 是 Python 的标准 GUI(Graphical User Interface,图形用户接口)库,Python 使用 Tkinter 可以快速地创建 GUI 应用程序. 在 Python2 和 Python3 中,Tkinter 都在标准库中,无需安装即可使用.在 Python2 中,这个库叫 Tkinter ,在

随机推荐