2016-04-12 18 views
0

私はPHPを使用してmySqlデータベースに画像をアップロードするためにアンドロイドアプリを作っています。コードは正常に動作していますが、1 MBのような大きなサイズの画像をアップロードしているときは動作しません。アップロードできる最大サイズは約600 KBです。PHPを使ってアンドロイドで画像をアップロードする際の画像のサイズを小さくする方法

私の質問は、どのように私はPHPのを使用してサーバーにアップロード中に画像のサイズを圧縮することができます。 PHPのための

私のコードは

<?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"; 
} 
?> 

であり、我々はファイルサイズがPNGでまだ多い圧縮するとアンドロイドの活動のための私のコードは

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 
+0

は、Android側でそれを送りますか? –

+0

'bmp.compress(Bitmap.CompressFormat.JPEG、5、baos);を使ってみてください。 – Mohit

+0

見てくださいhttp://stackoverflow.com/questions/18573774/how-to-reduce-an-image-サーバーの前にファイルサイズをアップロードする – Radhey

答えて

0

です。だから、この順序は、(昇順)

24ビットJPG圧縮された、8ビットのGIF、8ビットのPNGで圧縮ファイルのサイズが来た後this source suggestsとして

..ファイル圧縮でJPEGを使用することをお勧めします、フル・クオリティの24ビットJPG、および24ビットPNGをサポートしています。

Document氏は述べています.compress (format,quality,stream) 3つのパラメータ..

形式があります:JPEG、PNG、

品質WEBP

:0-100。 0は小サイズで圧縮、100は最高品質で圧縮を意味する

stream:OutputStream:圧縮データを書き込むための出力ストリーム。

そのうちformatquanlityはあなたが探しているものです...だから私はコメントしました。

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

JPEG、PNG間の更なる差異を探し、GIF:あなたが前にそれをしないのはなぜ

StackOverflow

+0

この情報についてのお詫びは他にも役立ちます。 –

+0

あなたの歓迎.. – Mohit

関連する問題