位图会更改发送到我的意图的质量。我怎样才能解决这个问题?

时间:2016-02-29 12:58:44

标签: android bitmap

我试图在Facebook上传图像,但是当它即将发布时,图像会被像素化,但是当帖子成功时图像如果没有像素化则是正确的图像。如何修复将发送到Facebook上传图片的图片?

    Bitmap bitmap= BitmapFactory.decodeResource(getResources(), img2[res2]);
    String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)+"/LatestShare.jpg";
    OutputStream out = null;
    File file=new File(path);
    try {
        out = new FileOutputStream(file);
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    path=file.getPath();
    Uri bmpUri = Uri.parse("file://"+path);
    Intent shareIntent = new Intent();
    shareIntent = new Intent(android.content.Intent.ACTION_SEND);
    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
    shareIntent.setType("image/jpg");
    startActivity(Intent.createChooser(shareIntent,"Share with"));

4 个答案:

答案 0 :(得分:0)

不处理图像。现在,您正在解码图像,然后将其重新编码为JPEG。

相反,在openRawResource()上使用Resources()获取资源上的InputStream,然后使用普通Java文件I / O将该内容复制到FileOutputStream。完成后,请务必flush()getFD().sync()close() FileOutputStream

然后,确保shareIntent中的MIME类型与可绘制资源的实际MIME类型匹配。如果您的资源是JPEG,那么您现在拥有的资源就可以了。

此外:

  • 不要使用连接来创建文件路径。使用File构造函数。这可确保您正确处理目录分隔符。

  • 使用Uri.fromFile()File转换为Uri,而非字符串连接。

  • 除非您认为用户希望此图片与其余照片并排放置,否则请勿使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)。相反,请使用getExternalCacheDir()Context上提供),这样就不会使用户的图库混乱等。

但是,最终,您的位图质量仅由您部分控制。您发送给它的应用程序欢迎使用位图执行任何操作,“无论它想要什么”都可能影响质量。除了与其他应用程序作者的文件错误报告之外,您无能为力。

另一个更复杂的可能性是您实现流ContentProvider,以避免将数据写入外部存储上的文件,因此期望第三方应用将READ_EXTERNAL_STORAGE作为权限。

答案 1 :(得分:0)

您似乎拥有(图像文件的)资源ID,您正试图从中获取图像文件。

resources.getResourceName(ID)获取一个ID并返回文件名的字符串表示形式。

让我们使用这些信息。因为,我们需要拥有资源ID并需要获取URI,

Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
                context.getResources().getResourcePackageName(resourceID) + '/' +
                context.getResources().getResourceTypeName(resourceID) + '/' +
                context.getResources().getResourceEntryName(resourceID) );

应该给出URI。地方可能需要进行小的修正。请随时编辑我的答案以反映相同的内容。

无需压缩。耶!

这有帮助吗?

答案 2 :(得分:0)

就像这样使用intent发送位图目录

  [request setValue:@"Your GW-Token Value" forHTTPHeaderField:@"GW-Token"];

使用Bitmap photo = BitmapFactory.decodeFile(picturePath); Bitmap imageBitmap= ReSizeBitmap.getResizedBitmap(photo, 300, 300);

直接发送位图对象

答案 3 :(得分:0)

我试图在Facebook上传图像,但是当它即将被发布时,图像会被像素化,但是当帖子成功时,图像如果没有像素化则是正确的图像。如何修复将发送到Facebook上传图片的图片?

当您发布图像时,图像会被Facebook像素化?这没有什么不对,这就是他们设计它的方式。你可以从你的最后做什么