我见过一些Groovy代码可以让你梳理图像和文字,但不能用图像和图像...
基本上,我需要在地图上的某些坐标处叠加符号:我有一些地图和符号作为.png文件。我可以做坐标计算没问题,所以问题更多的是,给定两个透明的png如何在不失透明度的情况下组合它们? (地图和符号都可能需要保持透明度。)
理想情况下我需要一个功能,比如
combinePngImage(background_src, foreground_src, foreground_x, foreground_y)
如果给出前景图像的左上角,右上角坐标,则会返回两者的png组合。
[背景:我有一些地图和符号作为.png文件存储在FileMaker的容器字段中,我需要在FileMaker解决方案中组合。我已经尝试使用ImageMagick和命令行来查看它,但它突然让我觉得这可能是使用ScriptMaster完成的,它使用Groovy创建外部函数。 ]
任何指针都感激不尽!
答案 0 :(得分:1)
好的,这是值得的 - 这里有一些鹅卵石拼凑的食谱片段似乎可以完成这项任务 - 任何关于(差)编码风格的评论都会得到很好的接受。
给定一个ScriptMaster调用
combineImage ( backgroundImg ; foregroundImg ; x ; y )
所需的代码是:
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;
// get container data
InputStream bgImgContainer
try{
bgImgContainer = fmpro.getContainerStream(backgroundImg)
}catch(e){
throw new Exception('Could not get data from background image container (make sure container field name is passed as text)')
}
// test if container field is empty
if( bgImgContainer == null ) {
throw new Exception('Background image container field is empty')
}
bgImgName = fmpro.getContainerFileName(backgroundImg);
InputStream fgImgContainer
try{
fgImgContainer = fmpro.getContainerStream(foregroundImg)
}catch(e){
throw new Exception('Could not get data from foreground image container (make sure container field name is passed as text)')
}
// test if container field is empty
if( fgImgContainer == null ) {
throw new Exception('Foreground image container field is empty')
}
fgImgName = fmpro.getContainerFileName(foregroundImg);
int xCoord = Integer.parseInt(x);
int yCoord = Integer.parseInt(y);
// load image from container data
BufferedImage result = ImageIO.read(bgImgContainer);
BufferedImage overlay = ImageIO.read(fgImgContainer);
int fgWidth = overlay.getWidth(null);
int fgHeight = overlay.getHeight(null);
Graphics2D graphics = result.createGraphics();
// overlay the foreground at given coordinates and actual size
graphics.drawImage(overlay, xCoord, yCoord, fgWidth, fgHeight, null);
graphics.dispose();
File output = File.createTempFile(bgImgName, ".png");
ImageIO.write(result, "png", output);
return output;
答案 1 :(得分:0)
您可以尝试使用纯{Java ImageMagick API} Im4java,而不是使用ImageMagick命令行。