人脸拼贴
用于创建自己的面部拼贴的 Java 代码
引言
这段Java代码可以生成一个由数百张图像组成的拼贴画,整体观看时会呈现出另一张图像的效果。
背景
我一直在探索Picasa 3的拼贴选项。这些选项仅限于图片堆叠、马赛克、网格拼贴等。我正在寻找一个可以制作形成图像的拼贴选项。令人惊讶的是,我在互联网上找不到这样的工具。因此,我编写了一个小的Java程序,它可以创建照片的拼贴。想要使用他们的照片创建拼贴,以形成他们脸部或其他照片的图像的人可以使用这个程序。下面提供了一些示例图像,以便了解其外观。
原始图像
拼贴
拼贴 - 缩放视图显示数百张小图像
Using the Code
对于想要生成这种拼贴画的人,这里有一些技巧
- 在程序的开头,你会找到“自定义部分”。这部分定义了六个参数。修改这些参数以最好地满足您的需求。有关参数的更多详细信息如下。
- mainImagePath 是您可以放置模型图像的位置。
- sourceFilesPath 是您存放大量将构成拼贴画的图像的文件夹。源图像越多,拼贴画的清晰度就越好。
- CollageFilePath 是您希望将拼贴画放置的文件夹。
enlargeSize
- 我使用这个参数是因为如果拼贴画的分辨率与原始照片相同,小图像的分辨率会非常低,因此即使放大,您也无法识别小图像。因此,enlargeSize
是拼贴画相对于模型图像放大的倍数。例如:如果您的模型图像是1600*1200,并且您将enlargeSize
设置为3
,那么拼贴画将是4800*3600的大小。XpixelsPerBlock
和YpixelsPerBlock
是拼贴画中每个小块的像素数。可以是16, 12或12, 9等。最好保持4:3的比例,因为大多数图像都是这种比例。像素大小越小,拼贴图像的清晰度越高,但小图像的分辨率会降低,反之亦然。- 使用Java 1.4或更高版本编译Java代码并执行它。
- 将模型图像和源图像放在正确的文件夹中,并创建一个文件夹来放置拼贴画。
// ######## CUSTOMIZATION PART ######## - start
// Main image that is formed by collage of images. Must be a bitmap.
private static String mainImagePath = "C:/Image/MainImage.jpg";
// Folder that contains bitmaps which form the collage
private static String sourceFilesPath = "C:/Image/Source/";
// Location where result image to be created.
private static String CollageFilePath = "C:/Image/Collage/";
// The number of times, final collage image to be bigger than actual image,
// so that the small images are clear when zoomed
private static int enlargeSize = 4;
// Number of pixels in each small block of the actual image.
// Smaller the pixels, better the final collage.
// Higher the pixels, small images in final collage look clear.
// Better to keep the same x-y ratio(4:3 generally) as your source images.
private static int XpixelsPerBlock = 12;
private static int YpixelsPerBlock = 9;
// ######## CUSTOMIZATION PART ######## - end
关注点
对于想要了解更多代码细节的技术人员
- 读取模型图像。对于每个小块(根据
XpixelsPerBlock
和YpixelsPerBlock
),找到平均RGB分量。 - 读取所有源图像,并找到每个图像的平均RGB分量。(这里不是每个块)
- 对于模型图像中的每个块,将其RGB与每个源图像的RGB进行比较(我使用了R G和B的差的平方和的平方根),并找到源图像的分量与块的分量偏差最小。将此匹配项存储在数组中。
- 现在您构建拼贴画。使用每个块的匹配源图像。
历史
- 2009年5月11日:初始版本
如果您有任何建议,请留下评论或给我发邮件。