サーバーにいくつかの画像があり、それらの画像をphpで取得し、サイズを変更してAndroidアプリに渡したいと思います。以下のコードを使用して画像のサイズを変更します。
<?php
$image = imagecreatefromjpeg("test.jpg");
$original_image_width = imagesx($image);
$original_image_height = imagesy($image);
$resize_ratio = 0.5;
$resized_height = $original_image_height * $ratio;
$resized_width = $original_image_width* $ratio;
$new_image = imagecreatetruecolor($resized_width, $resized_height);
$resized_image = imagecopyresampled($new_image, $image, 0, 0, 0, 0, $resized_width, $resized_height, $original_image_width, $original_image_height);
?>
その後、resized_image を android に渡す方法がわかりません。JSONObject と makeHttpRequest を使用して、アプリとサーバーの間で文字列変数を渡していますが、すべて正常に動作します。次のコードを使用して、resized_image を base64 文字列に変換しようとしました。
<?php
$thumbnail = imagejpeg($resized_image);
$thumbnail_base64 = base64_encode($thumbnail);
?>
そのように渡しますが、「タイプjava.lang.StringをJSONObjectに変換できません」というエラーが発生しました。
Androidアプリに渡すための最良の方法は何ですか? 誰かが base64 文字列を渡す方法を教えてくれれば、Android 側で残りを処理できます。前もって感謝します。
編集: 私の Android コードは次のとおりです。
class getAllReports extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(ShowAllReportsActivity.this);
pDialog.setMessage(getResources().getString(R.string.getting_reports));
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
JSONObject json = jParser.makeHttpRequest(url_all_reports,
"GET", params);
Log.d("Reports: ", json.toString());
try {
int success = json.getInt(TAG_SUCCESS);
if (success == 1) {
reports = json.getJSONArray(TAG_REPORTS);
for (int i = 0; i < reports.length(); i++) {
JSONObject c = reports.getJSONObject(i);
callNoArrayList.add(c.getString(TAG_CALL_NO));
yearArrayList.add(c.getString(TAG_YEAR));
modelArrayList.add(c.getString(TAG_MODEL));
tumbnailArrayList.add(c.getString(TAG_THUMBNAIL);
}
} else {
Intent i = new Intent(getApplicationContext(),
MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
long delayInMillis = 500;
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
pDialog.dismiss();
}
}, delayInMillis);
runOnUiThread(new Runnable() {
public void run() {
populateList();
}
});
}
}
TAG と ArrayList はメイン クラスで初期化されます。
私のPHPコードの残りの部分:
$db = new DB_CONNECT();
mysql_query('SET CHARACTER SET utf8');
$result = mysql_query("SELECT *FROM reports") or die(mysql_error());
if (mysql_num_rows($result) > 0) {
$response["reports"] = array();
while ($row = mysql_fetch_array($result)) {
$report = array();
$report["call_no"] = $row["call_no"];
$report["year"] = $row["year"];
$report["model"] = $row["model"];
$report["thumbnail"] = $thumbnail_base64;
array_push($response["reports"], $report);
}
$response["success"] = 1;
echo json_encode($response);
} else {
$response["success"] = 0;
$response["message"] = "No reports found";
echo json_encode($response);
}