Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

从本地相册选图片和拍照的图片需限制大小 #259

Open
musicode opened this issue Feb 6, 2018 · 10 comments
Open

从本地相册选图片和拍照的图片需限制大小 #259

musicode opened this issue Feb 6, 2018 · 10 comments
Labels

Comments

@musicode
Copy link

musicode commented Feb 6, 2018

微信发出去的大图,基本只有100多KB,希望 imui 也可以限制一下

@KenChoi1992
Copy link
Contributor

@musicode 你可以在发送的时候判断一下,如果太大就进行裁剪。

@musicode
Copy link
Author

musicode commented Feb 7, 2018

@KenChoi1992 我知道,但是 react native 没有这种库。。。

@musicode
Copy link
Author

musicode commented Feb 7, 2018

@KenChoi1992 AuroraIMUIModule 上面是否可以加一个图片裁剪的接口呢

@KenChoi1992
Copy link
Contributor

KenChoi1992 commented Feb 7, 2018

@musicode 你可以自己操作一下,我这里可以贴上代码。

import cn.jiguang.imui.commons.BitmapLoader;

...
/**
     * 裁剪图片,将图片按比例裁剪成 width * height 大小
     * @param map 包含 path,width,height 参数
     * @param callback 回调包含裁剪后的路径
     */
    @ReactMethod
    public void scaleImage(ReadableMap map, Callback callback) {
        try {
            String path = map.getString("path");
            int width = map.getInt("width");
            int height = map.getInt("height");
            File file = new File(path);
            WritableMap result = Arguments.createMap();
            if (file.exists() && file.isFile()) {
                Bitmap bitmap = BitmapLoader.getBitmapFromFile(path, width, height);
                String fileName = file.getName();
                String thumbPath = saveBitmapToLocal(bitmap, fileName);
                result.putInt("code", 0);
                result.putString("thumbPath", thumbPath);
                callback.invoke(result);
            } else {
                result.putInt("code", -1);
                result.putString("error", "Path is invalid");
                callback.invoke(result);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 根据bitmap保存图片到本地
     *
     * @param bitmap bitmap
     * @return file path
     */
    private String saveBitmapToLocal(Bitmap bitmap, String fileName) {
        if (null == bitmap) {
            return null;
        }
        String filePath;
        FileOutputStream fileOutput = null;
        File imgFile;
        try {
            File desDir = new File(getReactApplicationContext().getFilesDir() + "/thumbnails/");
            if (!desDir.exists()) {
                desDir.mkdirs();
            }
            imgFile = new File(getReactApplicationContext().getFilesDir() + "/thumbnails/", fileName);
            imgFile.createNewFile();
            fileOutput = new FileOutputStream(imgFile);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutput);
            fileOutput.flush();
            filePath = imgFile.getAbsolutePath();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            filePath = null;
        } catch (IOException e) {
            e.printStackTrace();
            filePath = null;
        } finally {
            if (null != fileOutput) {
                try {
                    fileOutput.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return filePath;
    }

@musicode
Copy link
Author

musicode commented Feb 7, 2018

还有 ios 呢,其实你给我代码我也不知道贴哪,不懂原生开发。。

我觉得这个功能其实都挺必要的,为啥不能集成到库里面呢

@musicode
Copy link
Author

musicode commented Feb 7, 2018

@KenChoi1992 @huangminlinux 这个问题年前会处理么?已经好久没发新版本了。。。

@musicode
Copy link
Author

musicode commented Feb 7, 2018

上传图片真的特别特别慢。。。

@musicode
Copy link
Author

新增加的 galleryScale 属性,我觉得用处不大,因为图片压缩是一个比较细节的逻辑,比如一张 10K 的图片,其实无需压缩,上传已经非常快,只有图片超过一个阈值(比如 500KB),才会有明显的上传延时。

此外,图片的尺寸,比如极端情况下有个 1000*10000 的图片(海报招聘类图片),需要按长边裁剪,比如限制高度最大为2000,然后等比例裁剪宽度

对于图片的大小,有时只想压缩清晰度,并不想改变图片宽高,从而实现压缩图片的目的。

另外,jpg 比 png 能小些,当图片大小超过阈值时(比如 500KB),转换格式效果说不定更好。

基于以上各种各样的情况,通过配置似乎并不容易实现,我想是否可以在 AuroraIMUIModule 对象上加一个压缩方法,实现各种压缩效果呢?

@musicode
Copy link
Author

@KenChoi1992

aurora-imui-react-native/ReactNative/chatinput.android.js 文件里的 ...View.propTypes 现在是会报错的,要改成 ViewPropTypes 才行

@musicode
Copy link
Author

@KenChoi1992 @huangminlinux 图片压缩还得麻烦两位了,这个确实不好搞,但是没有这个功能,发图片就变得很鸡肋了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants