【问题标题】:Compile Imagemagick for Android using NDK使用 NDK 为 Android 编译 Imagemagick
【发布时间】:2011-08-15 11:45:15
【问题描述】:

我是 android 新手,所以我有一个问题要问。我想使用ImageMagick 库在android 中编辑图像,但我不想使用JMagick 接口。

之前有人在 Android 上导入过Imagemagick 吗?如果是这样,您能否给我一些关于如何执行此操作的提示?

【问题讨论】:

    标签: android imagemagick


    【解决方案1】:

    我已经移植到android了,代码在github

    【讨论】:

    • 感谢您的代码。但是我很难在我的机器上编译你的代码。您能解释一下如何使用您的代码吗?
    • 最新的 github repo 包含了一个重建脚本。你可以看看它。基本上你在那个脚本中修改了 SDK 变量,一切都会正常工作。
    • 我下载了代码,但我无法使用它。首先,我无法编译它,它会抛出一些 freetype 缺失错误,所以我从旧提交中得到了 .so 。现在我遇到了问题,因为 Magick 包中有很多 java.awt 引用,但我确定 awt 在 Android 中不可用
    • 你有安卓可执行二进制文件吗?
    • 如何用它把帧转成gif?
    【解决方案2】:

    我猜还没有人移植,但你可以自己做。 您基本上需要获取源代码并创建一个 android.mk 文件。

    有几个链接帮助我构建了另一个库:

    【讨论】:

      【解决方案3】:

      刚刚移植here, 仍然粗略,但适用于大多数人。

      【讨论】:

        【解决方案4】:

        使用这个one,它被编译了。它不是awt;您只需要编译测试 apk。这里是测试示例:

        public class TesteNdkActivity extends Activity {
        
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
        
                try {
                    ImageInfo i = new ImageInfo("/sdcard/DCIM/Camera/IMG_20120226_230240.jpg");
                    MagickImage m = new MagickImage(i);
        
                    int newHeight = (int) ((640/(float)m.getWidth()) * m.getHeight());
                    m = m.scaleImage(640, newHeight);
                    m = m.cropImage(new Rectangle((640-480)/2, 0, 480, 480));
                    m = m.charcoalImage(0.5, 0.5);
        
                    try {
                        byte blob[] = m.imageToBlob(i);
                        FileOutputStream fos = new FileOutputStream(new File("/sdcard/foto_teste.jpg"));
                        fos.write(blob);
                        fos.close();
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                    }
                } 
                catch (MagickException e) {
                    e.printStackTrace();
                }
            }
        }
        

        (文本应用程序会将图片转换为 blob) 我成功了,你也会成功。 尽情享受吧。

        【讨论】:

        【解决方案5】:

        你可以选择opencv库来代替!

        【讨论】:

        • 问题来了:OpenCV 专注于计算机视觉,而 ImageMagick 专注于更一般的图像处理。将这两个库结合起来是有意义的,但是,对我来说,使用 OpenCV 而不是 ImageMagick,如果你有一个只有 ImageMagick 可以完成的任务,那就没有意义了。
        猜你喜欢
        • 2014-02-14
        • 2012-02-12
        • 2020-04-23
        • 2014-05-03
        • 2011-10-25
        • 1970-01-01
        • 2015-08-10
        • 1970-01-01
        相关资源
        最近更新 更多