繁体   English   中英

我如何使用Volley和Json将图像从php发送到android

[英]How can i send an image from php to android, using volley and Json

我试图加载我需要从服务器加载的图像,我有3个问题:

  1. 我不知道如何将图像转换为位图(在服务器端)
  2. 如何在图像中转换此位图(在android端)。
  3. 我如何发送带有排球请求的位图。

我正在用凌空抽空提出要求。 我拥有的服务器方法是这样的:

function getImage($image_path){
    $base ='images/practices/'.$image_path;
        $binary=base64_encode($base);
        $resp['image_binary']= $binary;
        print_r(json_encode($resp));
}

我用来执行其他请求的方法是:

String url = "---------";
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, url, null,
            new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                        try {
                        //here the processing of the response...
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Log.e("error",""+error.toString());
                }
            }
    );
    VolleyS.getInstance(this).addToRequestQueue(request);

尝试滑翔

UIL

简单易用

  1. 将图像存储在服务器上的文件夹中。
  2. 将图像名称存储在数据库中
  3. 用户Picasso / Imageloader / Glide库可加载图像。
  4. 像这样将图像URL传递给上述库: -http : //www.yourservername.com/imageFolderName/ImageName.jpj
  5. 图片名称来自您的JSON / XML响应,并简单地将其添加到上面的路径中

您可以使用以下任何一个库

  1. 滑行只需添加

跟随脚本到您的应用Gradle文件

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
  compile 'com.github.bumptech.glide:glide:3.7.0'
  compile 'com.android.support:support-v4:19.1.0'
}

然后您可以在活动中简单地使用这样的库

ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

Glide.with(this).load("<Image URL>").into(imageView);
  1. 毕加索通过简单地添加下面的脚本到你的应用程序文件的摇篮

compile 'com.squareup.picasso:picasso:2.5.2'

并将其用于这样的活动

Picasso.with(context).load("<image-url>").into(imageView);

将文件转换为base64

// 1 convert file to inputStream
// 2 wrap inputStream into byteArrayOutputStream
// 3 transform byteArrayOutputStream to byte array
// 4 convert byte array to Base64 object and return
public String mEncode(String filename) {
    int bytesRead;
    byte[] bytes = null;
    byte[] buffer = new byte[8192]; // buffer
    InputStream inputStream = null;
    ByteArrayOutputStream byteArrayOutputStream = null;
    try {
        inputStream = new FileInputStream(filename);
        byteArrayOutputStream = new ByteArrayOutputStream();
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            byteArrayOutputStream.write(buffer, 0, bytesRead);
        }
        bytes = byteArrayOutputStream.toByteArray();
    } catch (FileNotFoundException e1) {
        e1.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return Base64.encodeToString(bytes, Base64.DEFAULT);
}

将base64转换为文件

public static boolean convertCode2Image(String imageBase64Code, String filePath) {
    boolean success = false;
    try {
        // Converting a Base64 String into Image byte array
        byte[] imageByteArray = Base64.decodeBase64(imageDataString);
        // Write a image byte array into file system
        FileOutputStream imageOutFile = new FileOutputStream(filePath);
        imageOutFile.write(imageByteArray);
        imageOutFile.close();
        success = true;
    } catch (FileNotFoundException e) {
        printError("Image not found" + e);
    } catch (IOException ioe) {
        printError("Exception while reading the Image " + ioe);
    }
    return success;
}

我在googledevelopers中发现了这一点,当我能够从php发送位图时,我会证明这一点。

String URL= "http://image_url.png"; ImageRequest imageRequest = new ImageRequest(URL, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { // Assign the response to an ImageView ImageView imageView = (ImageView) findViewById(R.id.imageView); imageView.setImageBitmap(response); } }, int maxWidth, int maxHeight, null, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.d(TAG , error.toString()); } }); //add request to queue queue.add(imageRequest);

我找到了解决方案:

在Android中:

String imagepath = response.getString("path");
String url = "YOUR-URL";
ImageRequest request = new ImageRequest(url,
new Response.Listener<Bitmap>() {
    @Override
    public void onResponse(Bitmap bitmap) {
        ImageView imageView = (ImageView) findViewById(R.id.YOURIMAGEVIEW);
        imageView.setImageBitmap(bitmap);
    }
}, 0, 0, null,
new Response.ErrorListener() {
    public void onErrorResponse(VolleyError error) {
        ImageView mImageView = (ImageView) findViewById(R.id.imagepractice);
        mImageView.setImageResource(R.drawable.sq_br_down);
    }
});
VolleyS.getInstance(PracticeActivity.this).addToRequestQueue(request);

并在PHP服务器中:

function getImage($image){
    if(strpos($image,'png')){
        $im = imagecreatefrompng('images/'.$image);
        header('Conten-Type: image/png');
        imagepng($im);
    }else if(strpos($image,'jpeg')){
        $im = imagecreatefromjpeg('images/'.$image);
        header('Content-Type: image/jpeg');
        imagejpeg($im);
    }else if(strpos($image,'jpg')){
        $im = imagecreatefromjpeg('images/'.$image);
        header('Content-Type: image/jpeg');
        imagejpeg($im);
    }else{
        $im = imagecreatetruecolor(120, 20);
        $color_texto = imagecolorallocate($im, 233, 14, 91);
        imagestring($im, 1, 5, 5,  'ERROR', $color_texto);
        header('Conten-Type: image/vnd.wap.wbmp');
        imagewbmp($im);
    }
    imagedestroy($im);
}`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM