0

我在一个项目中工作,每个用户都有一个大头像和这个头像的缩略图。头像为 150x215,缩略图为 50x50。为了生成缩略图,用户在头像内部选择一个正方形区域,系统裁剪并调整头像的大小以生成缩略图。

现在我需要一个 70x70 的缩略图。我无法调整 50x50 缩略图的大小,因为它看起来不太好。我的想法是创建一个工具来查找头像内的缩略图,并使用缩略图位置生成新的 70x70 图像。它运行良好,直到我注意到一些缩略图不仅被裁剪,而且被调整大小。调整图像大小时,它会丢失像素,这使得无法进行逐像素比较(因此我无法检测到头像内的缩略图位置)。

有什么方法可以识别缩略图的位置(即使它已调整大小)?我正在使用EMGU来处理图像。

谢谢你的帮助

4

1 回答 1

1

[编辑1]

看到您的注释,如果您将缩放因子应用于原始头像,那么您可以创建一个应用了相同缩放因子的临时缩略图,然后针对已缩放的头像执行缩略图的统计等效性检查。这看起来像是针对缩略图可能位于化身内的每个位置的缩放化身图像找到缩略图的“差异图像”。对于这些“差异图像”中的每一个,将所有基于像素的差异添加到一个组合的单个数字差异中,并将其存储到一个 2D 数组中,该数组的大小为 x 和 y 位置的维度,缩略图可以放置在缩放的头像图像中(这将小于总头像图像大小,事实上它将是宽度 = avatarWidth - thumbWidth 和高度 = avatarHeight - thumbHeight)。在您计算了此二维数组的所有单个差异实例后,只需找到数组中的最小值,即要使用的缩放化身中左上角的像素位置。当从这个计算的左上角抓取 70 x 70 时,您当然必须考虑 50 x 50 拇指的新缩放尺寸。

您不必(顺便说一句)存储这个 2D 差异值数组,您可以简单地保存一个使用第一个测试位置的值初始化的最小位置,并且仅在当前位置小于当前位置时更新。这将避免增加阵列的存储空间。

[原创] 一旦头像图像被调整大小,它也被插值,这对于所有密集目的来说意味着原始像素信息已经在数学上发生了不可逆转的变化。

您可能会更幸运地进入原始缩略图代码,并更改缩略图代码以获取 70 x 70 px 的子图像,然后通过从每一侧再裁剪 10 px 来创建 50 x 50 !!!这是假设您仍然需要 50 x 50 和 70 x 70 的缩略图。

于 2012-06-25T16:34:44.323 回答