Java图像处理曲线-弯曲图像

Java Image manipulation curve-bend image

我有两张图片 杯子的第一张图片 ->

第二张图片是我想包裹在杯子上的标签(这张图片只是一个例子,实际的应用程序使用动态图片)。

我打算多次剪辑标签图像并将其放在杯子上,因此从不同角度创建 36 张 jpeg,我将使用 360 查看器在我的网站上显示结果。

到目前为止,我已经成功地使用标签图像的梯形区域来创建这个 (代码是 here

最后一步是创建这个(为此使用了 GIMP - 使用扭曲 -> 曲线弯曲)

谢谢

我想到的是一种叫做uv-mapping的技术。 以 https://en.wikipedia.org/wiki/UV_mapping 为起点。

另见 J3D - How to use a UV mapping of an object to convert 2D coordinates to 3D ones

我已经完成了一些工作。 起初,我使用 ImageMagick,生成 36 张图像需要 50 秒……这对我来说太长了。 所以我求助于 Java,我成功地使用一个简单的像素逐个像素地进行了简单的转换,并应用了 Sin 函数

for(int y = 0; y < bounds.height ; y++)
                {
                    for (int x = 0; x < bounds.width ; x++) {
                        int pixelRGB = img.getRGB(x, y);
                        int newX = x;
                        int newY = ((int)(Math.sin(x*Math.PI/bounds.width) * 40 )) + y  ;
                        newImg.setRGB(newX, newY, pixelRGB);            
                    }
                }

主线是 -> (Math.sin(x * Math.PI / bounds.width) * 40) + y

  • Math.PI / bounds.width -> 确保我只从 Sin 函数中获得 Y 的正值。
  • bounds.width - 是原始图像宽度,对于 Sin 函数,它告诉我们从 0,0 开始到正 Y 值并与 X 轴相交回到 bounds.width。
  • 40 -> 是您要使用的曲率水平
  • y - 只是一个 Y 轴偏移量。如果不应用,您将在目标图像中得到一行