如何对图库中的图像使用readFileToByteArray

时间:2018-12-25 11:44:31

标签: java android json

我正在尝试在我的应用程序中实现haystack.ai API。我阅读了文档。我需要帮助来更改代码中的某些内容。

在文档中的示例代码中,您提供了图像的路径。我需要让用户从图库中选择图片(我知道该怎么做),然后将图片转换为字节数组。 那就是我尝试过的:

onSelect: function(event) {
   setTimeout(function(that) { if (<my condition>) that.toolbar.disable('w2ui-delete'); }, 1, this);
}

}

logcat说:

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rate); backBtn = findViewById(R.id.back_btn); image = findViewById(R.id.imageRated); if (getIntent().getExtras() != null) { imageUri = Uri.parse(getIntent().getStringExtra("uri")); image.setImageURI(imageUri); } backBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(RateActivity.this, MainActivity.class); startActivity(intent); } }); try { getScore(); } catch (IOException e) { e.printStackTrace(); } } public void getScore() throws IOException { URL url = new URL("https://api.haystack.ai/api/image/analyze?output=json&apikey=myapikey"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); byte[] imageData = FileUtils.readFileToByteArray(new File(imageUri.toString())); OutputStream os = new BufferedOutputStream(conn.getOutputStream()); os.write(imageData); os.close(); InputStream is = conn.getInputStream(); byte[] buffer = new byte[1024]; ByteArrayOutputStream responseBuffer = new ByteArrayOutputStream(); while (true) { int n = is.read(buffer, 0, buffer.length); if (n <= 0) { break; } responseBuffer.write(buffer, 0, n); } String response = responseBuffer.toString("UTF-8"); Log.v("Score", response); } --->

RateActivity.getScore(Unknown Source:12) at line 62

我也尝试过:

byte[] imageData = FileUtils.readFileToByteArray(new File(imageUri.toString()));

文档中的原始代码为:

byte[] imageData = FileUtils.readFileToByteArray(new File(imageUri.getPath()));

我需要将所选图片转换为imageData数组。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

  

从您的问题看来,您想将图像URI转换为   byteArray。

在这种情况下,您可以尝试以下代码。

public void convertUriToByteArray(String uri)
    {
        ByteArrayOutputStream bArray = new ByteArrayOutputStream();
        FileInputStream fIn = null;
        try {
            fIn = new FileInputStream(new File(uri));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        byte[] buf = new byte[1024];
        int n;
        try {
            while (-1 != (n = fIn.read(buf)))
                bArray.write(buf, 0, n);
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] bytes = bArray.toByteArray();
    }