如何将 Theta 360 度照片发布到 Facebook

Posted

技术标签:

【中文标题】如何将 Theta 360 度照片发布到 Facebook【英文标题】:How to post the Theta 360 degree photo to facebook 【发布时间】:2017-10-27 09:32:31 【问题描述】:

我正在使用Theta Camera SDK 360 度拍照。

我想将这张照片发布到 Facebook,这是 360 度全景照片。

  String path=  "/storage/emulated/0/path/imagebitmap.jpg";

    SharePhoto photo = new SharePhoto.Builder()

            .setImageUrl(Uri.fromFile(new File(path)))
            .setCaption("")
            .build();

    SharePhotoContent content = new SharePhotoContent.Builder()
            .addPhoto(photo)

            .build();
    ShareApi.share(content,shareCallback);

它已成功发布在 facebook 上,但视图是这样的

我正在使用 ._er_injected 更改扩展名,但出现同样的问题。

也使用此代码

Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.imagebitmap);

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    icon.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteArray = stream.toByteArray();

    Bundle params = new Bundle();


    /*spherical_metadata*/
        String mjson="\"ProjectionType\": \"equirectangular\",\"CroppedAreaImageWidthPixels\": 240,\"CroppedAreaImageHeightPixels\": 240,\"FullPanoWidthPixels\": 1962,\"FullPanoHeightPixels\": 981,\"CroppedAreaLeftPixels\": 981,\"CroppedAreaTopPixels\": 490";

    params.putByteArray("picture", byteArray);
    params.putBoolean("allow_spherical_photo", true);
    params.putString("spherical_metadata", mjson);
    params.putString("name", "Panorama images");




 /* make the API call */


    new GraphRequest(
            AccessToken.getCurrentAccessToken(),
            "/me/photos",
            params,
            HttpMethod.POST,
            new GraphRequest.Callback() 
                public void onCompleted(GraphResponse response) 
        /* handle the result */

                    Log.e("@@@response", String.valueOf(response));
                //  Toast.makeText()


                
            
    ).executeAsync();

我认为我以错误的方式调用 API。

【问题讨论】:

【参考方案1】:

终于通过Read this Link和Facebook的Call graph Api得到了解决方案

更多信息请参阅This Facebook reference

从两个链接和相应的更改中仔细阅读 ProjectionType、CroppedAreaImageWidthPixels 等

所取的尺寸与图片的尺寸相同(5376*2688),所以根据图片宽度高度取尺寸

private void sharePhotoToFacebook()

  Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.imagebitmap);

  ByteArrayOutputStream stream = new ByteArrayOutputStream();
  icon.compress(Bitmap.CompressFormat.PNG, 100, stream);
  byte[] byteArray = stream.toByteArray();

  Bundle params = new Bundle();


  JSONObject json= new JSONObject();
  try 
     json.put("ProjectionType", "equirectangular");
     json.put("CroppedAreaImageWidthPixels", 5376);
     json.put("CroppedAreaImageHeightPixels", 2688);
     json.put("FullPanoWidthPixels", 5376);
     json.put("FullPanoHeightPixels", 2688);
     json.put("CroppedAreaLeftPixels", 0);
     json.put("CroppedAreaTopPixels", 0);

   catch (JSONException e) 
     // TODO Auto-generated catch block
     e.printStackTrace();
  


  JSONObject jsonObject=new JSONObject();
  params.putByteArray("picture", byteArray);
  params.putBoolean("allow_spherical_photo", true);
  params.putString("spherical_metadata", json.toString());




  new GraphRequest(
        AccessToken.getCurrentAccessToken(),
        "/me/photos",
        params,
        HttpMethod.POST,
        new GraphRequest.Callback() 
           public void onCompleted(GraphResponse response) 
        /* handle the result */

              Log.e("@@@response", String.valueOf(response));

  Toast.makeText(getApplicationContext(),"Snapshot shared On Facebook",Toast.LENGTH_SHORT).show();


           
        
  ).executeAsync();
 

【讨论】:

以上是关于如何将 Theta 360 度照片发布到 Facebook的主要内容,如果未能解决你的问题,请参考以下文章

360度全景效果图,如何制作?

[JavaScript案例]360度全景照片

Android:使用 Android API 29 的 Ricoh Theta 连接问题

360全景照片拍摄方式及注意事项

理光 THETA360 内嵌自动播放旋转

怎么做360度全景图?