最近发现这个马赛克图片很有趣,所以就在网上找了一个简单的python库来使用,因为都是封装好的,所以使用起来很简单。
python库:photomosaic
准备图片
因为制作图片都是封装好的代码,所以唯一麻烦的就是需要数千张不同的图片。这样的话,比较好的解决方法是使用爬虫一类自动采集的程序,在网络上爬取图片。不过,我为了省事,就简单来处理了。
这里我使用Java程序来生成自己需要的图片。
下面代码的功能是产生40000张图片。(参数是可以修改的)
package dragon;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
public class ImageProducer {
public static Color getColor(){
Random ran = new Random(System.currentTimeMillis());
int r = ran.nextInt(256);
int g = ran.nextInt(256);
int b = ran.nextInt(256);
return new Color(r,g,b);
}
public static void main(String[] args) throws IOException {
int count = 1;
for (int i = 1; i <= 40000; i++) {
File file = new File("D:/DragonFile/dragon/"+count+++".jpeg");
//绘制
BufferedImage image = new BufferedImage(40,40,BufferedImage.TYPE_INT_RGB);
//产生画笔
Graphics graph = image.getGraphics();
graph.setColor(getColor());
graph.fillRect(0, 0, 40, 40);
//产生真实的图片
ImageIO.write(image,"jpeg",file);
}
System.out.println("Execute Successfully!");
}
}
生成的图片
制作马赛克图片
# -*- coding: utf-8 -*-
"""
Spyder 编辑器
准备一个张目标文件夹和数千张图标
"""
import photomosaic as pm
bg_img = pm.imread("D:/DragonFile/target/target.jpg")
img_pool = pm.make_pool("D:/DragonFile/dragon/*.jpeg")
mosaic = pm.basic_mosaic(bg_img, img_pool, (200, 200))
pm.imsave("D:/DragonFile/target/mosaic.jpg", mosaic)
直接执行,等待下方这个过程完成即可。
执行完毕,40000张图片执行速度还是很快的。
效果展示
原图
生成图
局部放大,可以观察出,生成图是由小色块拼接而成的,所以图片的清晰度也与小色块的数量有关。
人物
使用 90000 张图片,清晰度有一定提高了。不过不是很明显。我尝试过 100 万张图片的效果,还是很不错的。不过那样产生图片和制作图片的过程都会变得很漫长,特别是制作图片,当时需要好几个小时,不过效果还行吧。