将压缩的图像上传到PHP服务器

用户名

在我的应用程序中,我正在将图像上传到服务器(使用以下代码),我能够成功将图像上传到服务器。我的问题是,如果我上传由相机拍摄的图像,由于图像的大小(1.5-5 MB),它需要很长时间才能上传。我在android中看到了很多压缩方法,但是我找不到应该在代码中使用的压缩方法,因为我是android的新手。我想减少上传时间。有人可以打电话给我如何压缩图像并上传到服务器吗?

public int uploadFile(String sourceFileUri) {


  String fileName = sourceFileUri;

HttpURLConnection conn = null;
DataOutputStream dos = null;  
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024; 
File sourceFile = new File(sourceFileUri); 

if (!sourceFile.isFile()) {

     //dialog.dismiss(); 

     Log.e("uploadFile", "Source File not exist :"+imagepath);

     runOnUiThread(new Runnable() {
         public void run() {
           messageText.setText("Source File not exist :"+ imagepath);
         }
     }); 

     return 0;

}
else
{
     try { 


         // open a URL connection to the Servlet
         FileInputStream fileInputStream = new FileInputStream(sourceFile);
         URL url = new URL(upLoadServerUri);

         // Open a HTTP  connection to  the URL
         conn = (HttpURLConnection) url.openConnection(); 
         conn.setDoInput(true); // Allow Inputs
         conn.setDoOutput(true); // Allow Outputs
         conn.setUseCaches(false); // Don't use a Cached Copy
         conn.setRequestMethod("POST");
         conn.setRequestProperty("Connection", "Keep-Alive");
         conn.setRequestProperty("ENCTYPE", "multipart/form-data");
         conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
         conn.setRequestProperty("uploaded_file", fileName); 

         dos = new DataOutputStream(conn.getOutputStream());

         dos.writeBytes(twoHyphens + boundary + lineEnd); 
         dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""
                                 + fileName + "\"" + lineEnd);

         dos.writeBytes(lineEnd);

         // create a buffer of  maximum size
         bytesAvailable = fileInputStream.available(); 

         bufferSize = Math.min(bytesAvailable, maxBufferSize);
         buffer = new byte[bufferSize];

         // read file and write it into form...
         bytesRead = fileInputStream.read(buffer, 0, bufferSize);  

         while (bytesRead > 0) {

           //dos.write(buffer, 0, bufferSize);
           dos.write(buffer, 0, bytesRead);
           bytesAvailable = fileInputStream.available();
           bufferSize = Math.min(bytesAvailable, maxBufferSize);
           bytesRead = fileInputStream.read(buffer, 0, bufferSize);   

          }

         // send multipart form data necesssary after file data...
         dos.writeBytes(lineEnd);
         dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

         // Responses from the server (code and message)
         serverResponseCode = conn.getResponseCode();
         String serverResponseMessage = conn.getResponseMessage();

         Log.i("uploadFile", "HTTP Response is : " 
               + serverResponseMessage + ": " + serverResponseCode);

         if(serverResponseCode == 200){

             runOnUiThread(new Runnable() {
                  public void run() {
                    //String msg = "File Upload Completed.";
                    //messageText.setText("File Upload Completed.");
                     // Toast.makeText(Messaging.this, "Image Sent Successfully", Toast.LENGTH_SHORT).show();

                         dialog.dismiss();


                      Toast toast = Toast.makeText(Messaging.this, "Image Successfully Shuffled and Sent \n You will be notified once it is solved", Toast.LENGTH_SHORT);
                      toast.setGravity(Gravity.CENTER|Gravity.CENTER, 0, 60);
                      toast.setDuration(Toast.LENGTH_LONG);
                      toast.show();
                  }
              });                
         }    

         //close the streams //
         fileInputStream.close();
         dos.flush();
         dos.close();

    } catch (MalformedURLException ex) {

        //dialog.dismiss();  
        ex.printStackTrace();

        runOnUiThread(new Runnable() {
            public void run() {
              messageText.setText("MalformedURLException Exception : check script url.");
                Toast.makeText(Messaging.this, "MalformedURLException", Toast.LENGTH_SHORT).show();
            }
        });

        Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
    } catch (Exception e) {

        //dialog.dismiss();  
        e.printStackTrace();

        runOnUiThread(new Runnable() {
            public void run() {
              messageText.setText("Got Exception : see logcat ");
                Toast.makeText(Messaging.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show();
            }
        });
        Log.e("Upload file to server Exception", "Exception : "  + e.getMessage(), e);  
    }

    return serverResponseCode; 

 } 
}

提前致谢

亨利4343

为旧图像创建新的图像位图,您需要调整图像像素的大小,以便获得较小尺寸的图像。
此代码可以获取调整位图的大小,以便可以将位图转换为图像

public Bitmap getBitmapFromFile(File dst) {
    if (null != dst && dst.exists()) {
        BitmapFactory.Options opts = null;
        opts = new BitmapFactory.Options();
        opts.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(dst.getPath(), opts);
        // calculate image size
        int width;
        int height;
        if (opts.outHeight > opts.outWidth) {
            height = 80;
            width = 50;
        }
        else {
            height = 60;
            width = 80;
        }

        final int minSideLength = Math.min(width, height);
        opts.inSampleSize = computeSampleSize(opts, minSideLength,
                width * height);
        opts.inJustDecodeBounds = false;
        opts.inInputShareable = true;
        opts.inPurgeable = true;

        try {
            return BitmapFactory.decodeFile(dst.getPath(), opts);
        } catch (OutOfMemoryError e) {
            e.printStackTrace();
        }
    }
    return null;
}

public static int computeSampleSize(BitmapFactory.Options options,
        int minSideLength, int maxNumOfPixels) {
    int initialSize = computeInitialSampleSize(options, minSideLength,
            maxNumOfPixels);

    int roundedSize;
    if (initialSize <= 8) {
        roundedSize = 1;
        while (roundedSize < initialSize) {
            roundedSize <<= 1;
        }
    } else {
        roundedSize = (initialSize + 7) / 8 * 8;
    } 
    return roundedSize;
}

private static int computeInitialSampleSize(BitmapFactory.Options options,
        int minSideLength, int maxNumOfPixels) {
    double w = options.outWidth;
    double h = options.outHeight;

    int lowerBound = (maxNumOfPixels == -1) ? 1 :
            (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels));
    int upperBound = (minSideLength == -1) ? 128 :
            (int) Math.min(Math.floor(w / minSideLength),
            Math.floor(h / minSideLength));

    if (upperBound < lowerBound) {
        return lowerBound;
    }

    if ((maxNumOfPixels == -1) &&
            (minSideLength == -1)) {
        return 1;
    } else if (minSideLength == -1) {
        return lowerBound;
    } else {
        return upperBound;
    }
}

将文件转换为位图后,您可以查看本教程将位图转换为文件

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从iOS将图像上传到PHP服务器

来自分类Dev

无法将图像上传到服务器ios

来自分类Dev

将图像从android上传到PHP服务器

来自分类Dev

将压缩图像上传到PHP服务器

来自分类Dev

正在将图像上传到服务器,但未显示

来自分类Dev

将图像上传到服务器不起作用

来自分类Dev

ExpressJS Multer:将图像上传到服务器

来自分类Dev

将图像上传到服务器时重命名

来自分类Dev

通过javascript将图像上传到服务器

来自分类Dev

Flutter Dio:无法将图像上传到服务器

来自分类Dev

将图像上传到服务器

来自分类Dev

iOS通过ASP将图像上传到服务器

来自分类Dev

从PictureBox将图像上传到服务器

来自分类Dev

无法将图像上传到服务器ios

来自分类Dev

将图像从android上传到PHP服务器

来自分类Dev

PHP将图像上传到服务器

来自分类Dev

从Android设备将图像上传到服务器

来自分类Dev

正在将图像上传到服务器,但未显示

来自分类Dev

将图像上传到服务器symfony2

来自分类Dev

将转换后的图像上传到服务器

来自分类Dev

将图像上传到服务器不起作用

来自分类Dev

使用AsyncTask将图像或视频上传到服务器

来自分类Dev

将调整大小的表单图像上传到服务器

来自分类Dev

无法将经过改造的图像上传到服务器

来自分类Dev

Java Android将图像上传到服务器

来自分类Dev

Android无法将图像上传到服务器

来自分类Dev

Xamarin:将图像上传到服务器

来自分类Dev

使用tinymce将图像上传到服务器

来自分类Dev

使用 cURL 将图像上传到 PHP 服务器?