我已经将Image magick与Java WebApp集成在一起,并将其部署在Azure App Service上。在 azure 上,我得到 0kb 作为图像的输出图像,而相同的图像在我的本地机器上转换得很好。我正在使用im4java与Image Magick集成。下面是代码:
public void compressImage(String imageSource, String destinationPath) throws IOException, InterruptedException,
IM4JavaException {
ConvertCmd cmd = getCommand();
// create the operation, add images and operators/options
IMOperation op = new IMOperation();
op.strip();
op.interlace();
op.addRawArgs(compressionRawArguments);
op.gaussianBlur(compressionGaussianBlur);
op.quality(compressedImageQuality);
op.addImage(imageSource); // source file
op.addImage(destinationPath); // destination file
// execute the operation
cmd.run(op);
}
imageSource 和 destination 都是使用 java 创建的临时文件。我已经检查了 imageSource 文件的大小是否正确,但在运行此代码后,目标文件始终为 0 Kb。
请告知我可能做错了什么?
回答我自己的问题,以便 它可能对可能面临此问题的开发人员有所帮助。
Azure App Service 通常具有 Windows Server VM。您可以在 Web 容器日志中检查服务器的操作系统。
Image Magick for Windows 不允许转换远程 http 图像网址,而对于Unix系统,它允许这样做。我的本地计算机是 MAC 所以它在我的本地系统上工作正常。
我发现的2个解决此问题的方法:
-
要么在 Azure 上使用 Linux VM
-
在应用程序中,将图像 URL 下载到临时文件,然后提供该临时文件的绝对路径以图像魔术转换。
我已经尝试了两者,并且都在工作。