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 轴偏移量。如果不应用,您将在目标图像中得到一行
我有两张图片
杯子的第一张图片 ->
第二张图片是我想包裹在杯子上的标签(这张图片只是一个例子,实际的应用程序使用动态图片)。
我打算多次剪辑标签图像并将其放在杯子上,因此从不同角度创建 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 轴偏移量。如果不应用,您将在目标图像中得到一行