0

I'm making an android app to upload the image in mySql db using php. The code is working properly but when I'm uploading the image of bigger size like of 1 MB then it is not working. The max size it can upload is around 600 KB.

So my question is that how can i compress the size of image while uploading it to the server using php.

My code for php is

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){

$photo= $_POST['photo'];
$bookname=$_POST['bookname'];
        $phoneNumber=$_POST['phoneNumber'];
        $price=$_POST['price'];

require_once('loginConnect.php');

$sql ="SELECT id FROM images ORDER BY id ASC";

$res = mysqli_query($con,$sql);

$id = 0;

while($row = mysqli_fetch_array($res)){
        $id = $row['id'];
}



         $path = "uploads/$id.png";
$actualpath = "http://www.bsservicess.com/photoUpload/$path";

$sql = "INSERT INTO images (photo,bookname,phoneNumber,price) VALUES
('$actualpath','$bookname','$phoneNumber','$price')";

if(mysqli_query($con,$sql)){
    file_put_contents($path,base64_decode($photo));
    echo "Successfully Uploaded";
}

mysqli_close($con);
}else{
echo "Error";
}
?>

and my code for android activity is

 package com.manali.vivek.userregistration;

import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v7.app.ActionBarActivity;
import android.util.Base64;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;


public class image extends ActionBarActivity implements View.OnClickListener 
{

public static final String UPLOAD_URL =  
"http://www.bsservicess.com/photoUpload/uploadImage.php"; 
public static final String UPLOAD_KEY = "photo";

private int PICK_IMAGE_REQUEST = 1;

private Button buttonChoose;
private Button buttonUpload;
private Button buttonView;

private ImageView imageView;

private Bitmap bitmap;

private Uri filePath;
EditText et1, et2, et3;


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image);

buttonChoose = (Button) findViewById(R.id.buttonChoose);
buttonUpload = (Button) findViewById(R.id.buttonUpload);
buttonView = (Button) findViewById(R.id.buttonViewImage);
et1 = (EditText) findViewById(R.id.et1);
et2 = (EditText) findViewById(R.id.et2);
et3 = (EditText) findViewById(R.id.et3);
imageView = (ImageView) findViewById(R.id.imageView);

buttonChoose.setOnClickListener(this);
buttonUpload.setOnClickListener(this);
buttonView.setOnClickListener(this);




}

private void showFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), 
PICK_IMAGE_REQUEST);
}


protected void onActivityResult(int requestCode, int resultCode, Intent
 data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data
!= null && data.getData() != null) {

    filePath = data.getData();
    try {
        bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),
    filePath);
        imageView.setImageBitmap(bitmap);
    } catch (IOException e) {
        e.printStackTrace();
    }
} 
}

  public String getStringImage(Bitmap bmp) {
   ByteArrayOutputStream baos = new ByteArrayOutputStream();
    bmp.compress(Bitmap.CompressFormat.PNG, 10, baos);
   byte[] imageBytes = baos.toByteArray();


       String encodedImage = Base64.encodeToString(imageBytes, 
     Base64.DEFAULT);
       return encodedImage;
      }


      private void uploadImage() {


         class UploadImage extends AsyncTask<Bitmap, Void, String> {

        ProgressDialog loading;
       RequestHandler rh = new RequestHandler();

      @Override
      protected void onPreExecute() {
        super.onPreExecute();
        loading = ProgressDialog.show(image.this, "Uploading Image",
     "Please wait...", true, true);
     }

     @Override
     protected void onPostExecute(String s) {
        super.onPostExecute(s);
        loading.dismiss();
        Toast.makeText(getApplicationContext(), s, 
    Toast.LENGTH_LONG).show();
     }

     @Override
     protected String doInBackground(Bitmap... params) {

        Bitmap bitmap = params[0];
        String uploadImage = getStringImage(bitmap);
        String bookname = et1.getText().toString();
        String phoneNumber = et2.getText().toString();
        String price = et3.getText().toString();

        HashMap<String, String> data = new HashMap<>();
        data.put(UPLOAD_KEY, uploadImage);

        data.put(Fetch.BOOK_NAME, bookname);
        data.put(Fetch.PHONE_NUMBER, phoneNumber);
        data.put(Fetch.PRICE, price);


        String result = rh.sendPostRequest(UPLOAD_URL, data);

        return result;
    }

 }

 UploadImage ui = new UploadImage();

 ui.execute(bitmap);

}


@Override
public void onClick(View v) {
if (v == buttonChoose) {
    showFileChooser();
}
if (v == buttonUpload) {
    uploadImage();
}


if (v == buttonView) {
    viewImage();
 }
}


private void viewImage() {
startActivity(new Intent(image.this, Main.class));
}


 ///////toolbar

 }

I have try everything but nothing works so plz help me
Ajit Medhekar
  • 1,018
  • 1
  • 10
  • 39
Nicky Manali
  • 386
  • 3
  • 22

1 Answers1

0

When we compress file size is still more in PNG. So it is better to use JPEG in file compression ..

As this source suggests after compression file size comes is this order (ascending)

24-bit JPG Compressed, 8-bit GIF, 8-bit PNG, Full Quality 24-bit JPG, and 24-bit PNG.

Document says .compress (format,quality,stream) there are three parameter..

format : JPEG, PNG, WEBP

quality : 0-100. 0 meaning compress for small size, 100 meaning compress for max quality

stream : OutputStream: The outputstream to write the compressed data.

Of which format, quanlity is what you where looking for...So as I have commented try.

bmp.compress(Bitmap.CompressFormat.JPEG, 5, baos);

Look for further difference between JPEG,PNG,GIF:

StackOverflow

Community
  • 1
  • 1
Iamat8
  • 3,888
  • 9
  • 25
  • 35