Java、python制作马赛克图片

23 篇文章 1 订阅

最近发现这个马赛克图片很有趣,所以就在网上找了一个简单的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 万张图片的效果,还是很不错的。不过那样产生图片和制作图片的过程都会变得很漫长,特别是制作图片,当时需要好几个小时,不过效果还行吧。
网络图片

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值