What if I ask you to guess the icon image for WhatsApp or Instagram? Even before your mind processes my question, decides an image and reverts, your tongue would have already answered to me. Images play that important role in making an app or so to specify, an android app. Here, forehead a sample, I will Upload an image from Android SD Card using App42 Upload Service. Thereafter, I will perform Caching, Sharing and Saving operations on the image.
- Upload an image on the server from Android SD Card
- Make a more swift App in case of image caching
- Increase user engagement by pushing user to share these images
- Save these images in SD card
もしWhatsAppやInstagramのアイコンイメージを推測して欲しいと頼まれたらどうしますか。あなたの心がその質問を理解した後イメージを決定して答える前に、あなたの舌が既に私に答えを教えているでしょう。イメージはアプリを開発するときやアンドロイドアプリを特定するために、このような重要な役割を果たしています。今回の記事ではサンプルを紹介する前に、App42 Upload Serviceを使用しているアンドロイドSDカードからイメージをアップロードします。その後、そのイメージにおいてオペレーションをキャッシャ、シェアそして保存を実行していきます。
Y si te pido adivinar la imagen del icono de WhatsApp o Instagram? Incluso antes que su mente procese mi pregunta, esta reproduce una imagen como respuesta y ya habría respondido a mi pregunta. Las imágenes juegan un rol muy importante en el desarrollo de una aplicación o para ser más específico, una aplicación Android. A continuación un ejemplo, subiré una imagen desde SD Card de Android usando App42 Upload Service. Posteriormente, realizaré las operaciones de cacheo, compartir y guardar de la imagen.
- Subir una imagen desde el servidor de Android SD Card
- Hacer una aplicación más rápida en caso de cacheo de imágenes.
- Incrementar el compromiso del usuario haciendo que este comparta estas imágenes
- Guardar estas imágenes en la tarjeta SD
Bagaimana jika saya meminta Anda menebak gambar ikon untuk WhatsApp atau Instagram? Bahkan sebelum pikiran Anda memproses pertanyaan saya, menentukan gambar dan beralih, lidah Anda pasti sudah menjawabnya. Gambar memainkan peran penting dalam membuat aplikasi atau terlebih khusus, aplikasi android. Dalam blog ini, saya akan Upload gambar dari Android SD Card menggunakan App42 Upload Service, sebagai contoh. Setelah itu, saya akan melakukan operasi Caching, Sharing and Saving pada gambar.
- Upload sebuah gambar pada server dari SD card Android
- Buat Aplikasi yang lebih cepat jika terjadi Image Caching
- Menambahkan User Engagement dengan mendorong user untuk membagikan gambar-gambar tersebut
- Save gambar-gambar didalam SD card
Image Uploading
Firstly, upload an image from Android SD Card to Server so as to get a Web URL to perform operations on the image like sharing. Here, we are using App42’s service to upload an image on the server.
Image Caching
When you build a mobile or a web application, you have to make sure it runs as fast as possible. For this, the most important function is caching. If you are using a certain resource in your application, you should know that it isn’t as easy to retrieve. I used LruCache Algorithm to implement this mechanism.
LRUCache
LRU stands for Least Recently Used. The term itself clarifies the way cache would work. LUCaches have a fixed cache size and work like a queue. If a new object is added to the cache, it is being placed at the beginning of the queue. Later, when the app asks to get an object from the cache, it is placed at the starting of a queue. This way the LRU objects are left at the initial point of the queue.
Image Sampling
While loading an image from the web, its resolution can be larger than the device. Sampling can provide a better way of loading and optimizing memory.
Image Sharing
Using images in the App from Gallery and sharing it within your contacts will increase user engagement in android.
Image Saving
After loading an image from the web, if you need to save it, you can do so in SD Card for further usage.
About Sample Application
- Register with App42 Platform.
- Create an app once you are on the Quick-start page after the registration
- If you are already registered, login to AppHQ console and create an app from App Manager -> App Create link
- Download the project from here and import it in eclispe
- Open MainActivity.java file and pass the required information in onCreate method as shown below (application keys for AppHq console)
[code java]App42API.initialize(this,"App42 API key","App42 secret Key");[/code]
- Change the application name with your application name in res/strings (useful to save image in SD card)
- Build and run the application
Design Details
Get Image from Android SD Card Gallery: Get an image for your app from Android SD Card with the code written in MainActivity.java file.
[code java] /*
* Call when user clicks on browse photo
*/
private void browsePhoto(String imageName) {
if (this.imageName != null && !this.imageName.equals(""))
this.imageName = imageName;
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERN
AL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
}
/*
* Callback when user select image from gallery for upload
* get a callback
* @see android.app.Activity#onActivityResult(int, int,
* android.content.Intent)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
progressDialog.setMessage("uploading image");
progressDialog.show();
uploadImage(picturePath);
}
}[/code]
Upload Image Using App42 Uplaod Service: If you want to upload an image on the server from Android Sd Card gallery, you can follow the code written in MainActivity.java file.
[code java]private void uploadImage(String imagePath) {
App42API.buildUploadService().uploadFile(imageName, imagePath,
UploadFileType.IMAGE, Description, new App42CallBack() {
public void onSuccess(Object uploadObj) {
// TODO Auto-generated method stub
onUploadResult(uploadObj);
}
public void onException(Exception ex) {
// TODO Auto-generated method stub
System.out.println(ex);
onUploadError(ex);
}
});
}[/code]
Share Image to friends: If you want to share an image with your friends using several apps installed in your device, you can follow the code written in MainActivity.java file.
[code java]Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Hey friends checkout this image"+"\n\n"+imageUrl);
intent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Check My Image ");
startActivity(Intent.createChooser(intent, "Share"));[/code]
Loading and Caching of Image: ImageCacher.java file contains all types of coding, which is required to share an image from the web or cache accordingly.
If you want to load an image without sampling that you should use in our Android Activity class file, here is the code:
[code java]ImageView imgLogo = (ImageView) findViewById(R.id.my_image);
ImageCacher imageCacher=new ImageCacher(this, -1);
imageCacher.loadImage(imageUrl, imgLogo);[/code]
If you want to load an image with sampling that can be used in your Android Activity class, please follow the code below:
[code java]ImageView imgLogo = (ImageView) findViewById(R.id.my_image);
ImageCacher imageCacher=new ImageCacher(this, SamplingImageSize);
imageCacher.loadImage(imageUrl, imgLogo);[/code]
If you want to load an image from the web or cache, you should follow the code below:
[code java]public Bitmap getBitmap(String url) {
String filename = String.valueOf(url.hashCode());
File f = new File(cacheDir, filename);
// from SD cache
Bitmap b;
if (isSamplingReq) {
b = decodeWithoutSampling(f);
} else {
b = decodewithSampleing(f);
}
if (b != null)
return b;
// from web
try {
Bitmap bitmap = null;
InputStream is = new URL(url).openStream();
OutputStream os = new FileOutputStream(f);
Utility.CopyStream(is, os);
os.close();
if (isSamplingReq) {
bitmap = decodeWithoutSampling(f);
} else {
bitmap = decodewithSampleing(f);
}
return bitmap;
} catch (Throwable ex) {
ex.printStackTrace();
if (ex instanceof OutOfMemoryError)
clearCache();
return null;
}
}[/code]
Code for Image Sampling:
[code java]private Bitmap decodewithSampleing(File f) {
try {
// decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < requiredSize
|| height_tmp / 2 < requiredSize)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
}
return null;
}[/code]
Code Without Sampling:
[code java]private Bitmap decodeWithoutSampling(File f) {
try {
return BitmapFactory.decodeStream(new FileInputStream(f));
} catch (Exception e) {
}
return null;
}[/code]
Save Image in SD Card Gallery: If you want to save an Image in Android SD Card Gallery,
you can follow the code written in MainActivity.java file.
[code java]void saveMyImage() {
Bitmap bmImg = imageCacher.getBitmap(imageUrl);
File filename;
try {
String path1 = android.os.Environment.getExternalStorageDirectory()
.toString();
Log.i("in save()", "after mkdir");
File file = new File(path1 + "/" + appName);
if (!file.exists())
file.mkdirs();
filename = new File(file.getAbsolutePath() + "/" + imageName
+ ".jpg");
Log.i("in save()", "after file");
FileOutputStream out = new FileOutputStream(filename);
Log.i("in save()", "after outputstream");
bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
Log.i("in save()", "after outputstream closed");
//File parent = filename.getParentFile();
ContentValues image = getImageContent(filename);
Uri result = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
Toast.makeText(getApplicationContext(),
"File is Saved in " + filename, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
public ContentValues getImageContent(File parent) {
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, appName);
image.put(Images.Media.DISPLAY_NAME, imageName);
image.put(Images.Media.DESCRIPTION, "App Image");
image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
image.put(Images.Media.MIME_TYPE, "image/jpg");
image.put(Images.Media.ORIENTATION, 0);
image.put(Images.ImageColumns.BUCKET_ID, parent.toString()
.toLowerCase().hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName()
.toLowerCase());
image.put(Images.Media.SIZE, parent.length());
image.put(Images.Media.DATA, parent.getAbsolutePath());
return image;
}[/code]
In this blog, I have explained you about uploading, caching, saving and sharing of images in Android application.
If you have any queries or need further assistance, please feel free to reach us at support@shephertz.com
- アンドロイドSDカードからサーバーでイメージをアップロード
- イメージキャッシングの場合Swiftアプリを開発
- イメージをシェアするためにユーザーをプッシュすることでエンゲージメントを増加
- SDカードにイメージを保存
イメージアップロード
まず、イメージ上でオペレーションを実行するためのウェブURLを入手するために、アンドロイドSDカードからサーバーにイメージをアップロードします。ここでは、サーバーにイメージをアップロードするためにApp42サービスを使用しています。
イメージキャッシング
モバイルやウェブアプリを開発するとき、それができるだけ早く動くことを確かめる必要があります。このため、最も重要な機能がキャッシングとなります。もしあなたがアプリ内であるリソースを使用するならば、復元することは簡単ではないことを知るべきでしょう。私はこのメカニズムを実行するためにLRUキャッシュアルゴリズムを使用しました。
LRUキャッシュ
LRU(Least Recently Used)とは、最近使用されていないということを表します。この言葉自体はキャッシュの働き方を明確にします。LRLキャッシュは固定されたキャッシュサイズで、キューのように機能します。もし新しいオブジェクトがキャッシュに追加されるならば、それはキューの前半に置かれていくことになります。その後アプリがキャッシュからオブジェクトを入手するように求めるとき、それはキューのスタート地点に置かれます。このようにして、LRUオブジェクトは先頭に残ることになるのです。
イメージサンプリング
ウェブからイメージをロードする間、そのレゾリューションはデバイスよりも大きくなる可能性があります。サンプリングはメモリをロードして最適化するのにより良い方法を提供できます。
イメージシェアリング
ギャラリーからアプリ内でイメージを使用することやあなたのコンタクト内でそれをシェアすることは、アンドロイドでユーザーエンゲージメントを増加させるでしょう。
イメージ保存
ウェブからイメージをロードした後、もしそれを保存する必要があるならば、さらなる利用のためにSDカードに保存しましょう。
サンプルアプリに関して
- App42のプラットフォームに登録
- 登録後Quick – Startページに入りアプリを開発
- もし既に登録されているならば、AppHQコンソールにログインして、「App Manager」→「App Create Link」からアプリを開発しましょう。
- ここからプロジェクトをダウンロードして、エクリプスでそれをインポートしましょう
- MainActivity.javaファイルを開き、下記に示すようにonCreateメソッドで要求される情報をパスしましょう。
App42API.initialize(this,"App42 API key","App42 secret Key");
- あなたのアプリネームにres/stringsで変更しましょう(SDカードで保存するのに便利です)
- アプリを開発して運用しましょう
詳細をデザイン
アンドロイドSDカードギャラリーからイメージを入手:MainActivity.javaファイルで記入されたコードを持つアンドロイドSDカードから、アプリ用のイメージを入手しましょう。
/*
* Call when user clicks on browse photo
*/
private void browsePhoto(String imageName) {
if (this.imageName != null && !this.imageName.equals(""))
this.imageName = imageName;
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERN
AL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
}
/*
* Callback when user select image from gallery for upload
* get a callback
* @see android.app.Activity#onActivityResult(int, int,
* android.content.Intent)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
progressDialog.setMessage("uploading image");
progressDialog.show();
uploadImage(picturePath);
}
}
App42アップロードサービスを使用しているイメージをアップロード:もしあなたがアンドロイドSDカードギャラリーからサーバーにイメージをアップロードしたいのであれば、MainActivity.javaファイルに記入されたコードを参考にできます。
private void uploadImage(String imagePath) {
App42API.buildUploadService().uploadFile(imageName, imagePath,
UploadFileType.IMAGE, Description, new App42CallBack() {
public void onSuccess(Object uploadObj) {
// TODO Auto-generated method stub
onUploadResult(uploadObj);
}
public void onException(Exception ex) {
// TODO Auto-generated method stub
System.out.println(ex);
onUploadError(ex);
}
});
}
友人とイメージをシェア:もしデバイスにインストールされたいくつかのアプリを使用してイメージを友人とシェアしたいのであれば、MainActivity.javaファイルで記入されたコードに沿ってそれが可能です。
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Hey friends checkout this image"+"\n\n"+imageUrl);
intent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Check My Image ");
startActivity(Intent.createChooser(intent, "Share"));
イメージをロードしてキャッシュ:ImageCacher.javaファイルはすべての種類のコードを含んでおり、それはウェブやキャッシュから適宜イメージをシェアするために要求されています。
もしあなたがサンプリングなしで私達のアンドロイドアクティビティクラスファイルを使用すべきイメージをロードしたいのであれば、ここにコードがあります。
ImageView imgLogo = (ImageView) findViewById(R.id.my_image);
ImageCacher imageCacher=new ImageCacher(this, -1);
imageCacher.loadImage(imageUrl, imgLogo);
もしあなたがアンドロイドアクティビティクラスで使用されうるサンプルを持つイメージをロードしたいのであれば、下記のコードを参考にしてください。
ImageView imgLogo = (ImageView) findViewById(R.id.my_image);
ImageCacher imageCacher=new ImageCacher(this, SamplingImageSize);
imageCacher.loadImage(imageUrl, imgLogo);
もしあなたがウェブやキャッシュからイメージをロードしたいのであれば、下記のコードを参考にしてください。
public Bitmap getBitmap(String url) {
String filename = String.valueOf(url.hashCode());
File f = new File(cacheDir, filename);
// from SD cache
Bitmap b;
if (isSamplingReq) {
b = decodeWithoutSampling(f);
} else {
b = decodewithSampleing(f);
}
if (b != null)
return b;
// from web
try {
Bitmap bitmap = null;
InputStream is = new URL(url).openStream();
OutputStream os = new FileOutputStream(f);
Utility.CopyStream(is, os);
os.close();
if (isSamplingReq) {
bitmap = decodeWithoutSampling(f);
} else {
bitmap = decodewithSampleing(f);
}
return bitmap;
} catch (Throwable ex) {
ex.printStackTrace();
if (ex instanceof OutOfMemoryError)
clearCache();
return null;
}
}
イメージサンプリング用のコード
private Bitmap decodewithSampleing(File f) {
try {
// decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < requiredSize
|| height_tmp / 2 < requiredSize)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
}
return null;
}
サンプリングなしのコード
private Bitmap decodeWithoutSampling(File f) {
try {
return BitmapFactory.decodeStream(new FileInputStream(f));
} catch (Exception e) {
}
return null;
}
SDカードギャラリーにイメージを保存:アンドロイドSDカードギャラリーにイメージを保存したのであれば、MainActivity.javaファイルで記入されたコードを参考にできます。
void saveMyImage() {
Bitmap bmImg = imageCacher.getBitmap(imageUrl);
File filename;
try {
String path1 = android.os.Environment.getExternalStorageDirectory()
.toString();
Log.i("in save()", "after mkdir");
File file = new File(path1 + "/" + appName);
if (!file.exists())
file.mkdirs();
filename = new File(file.getAbsolutePath() + "/" + imageName
+ ".jpg");
Log.i("in save()", "after file");
FileOutputStream out = new FileOutputStream(filename);
Log.i("in save()", "after outputstream");
bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
Log.i("in save()", "after outputstream closed");
//File parent = filename.getParentFile();
ContentValues image = getImageContent(filename);
Uri result = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
Toast.makeText(getApplicationContext(),
"File is Saved in " + filename, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
public ContentValues getImageContent(File parent) {
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, appName);
image.put(Images.Media.DISPLAY_NAME, imageName);
image.put(Images.Media.DESCRIPTION, "App Image");
image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
image.put(Images.Media.MIME_TYPE, "image/jpg");
image.put(Images.Media.ORIENTATION, 0);
image.put(Images.ImageColumns.BUCKET_ID, parent.toString()
.toLowerCase().hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName()
.toLowerCase());
image.put(Images.Media.SIZE, parent.length());
image.put(Images.Media.DATA, parent.getAbsolutePath());
return image;
}
このブログでは、アップロードやキャッシュ、アンドロイドアプリにおけるイメージの保存やシェアを説明してきました。
質問がございましたら、お気軽にsupport@shephertz.comまでご連絡ください。
Carga de imágenes
En primer lugar, suba una imagen desde Android SD Card al servidor en fin de conseguir una URL Web para realizar operaciones en la imagen como compartirla. Aquí, usamos el servicio de App42 para subir una imagen al servidor.
Cacheo de imágenes
Cuando construye una aplicación web o móvil, tiene que estar seguro que esta opere tan rápido como sea posible. Para esto, la función más importante es el cacheo. Si usa ciertos recursos en su aplicación, debe saber que no es tan fácil recuperarlos. He usado LruCache Algorithm para implementar este mecanismo.
LRUCache
LRU es una abreviación de Least Recently Used, que significa menos usado recientemente. El termino mismo clarifica la forma en como cache funcionará. LUCaches tiene un tamaño cache establecido y trabaja como una lista de espera. Si un nuevo objeto es añadido a cache, este es ubicado al principio de la cola. Luego, cuando la aplicación requiere un objeto desde cache, este es ubicado al principio de la cola. De esta manera los objetos de LRU son dejados en el punto inicial de la cola.
Muestro de imágenes
Mientras descarga una imagen desde la red, la resolución puede ser más grande que el dispositivo. Las muestras pueden proveer una mejor manera de descargar y optimizar la memoria.
Compartir imágenes
Usar imágenes en la aplicación desde la galería y compartirlas con sus contactos incrementará el compromiso del usuario en Android.
Guardar imágenes
Después de descargar una imagen desde la red, si necesita guardarla puede hacerlo en la SD Card para un uso posterior.
Acerca de la aplicación de la muestra
- Regístrese con App42 Platform
- Cree una aplicación una vez este en la página Quick-start después del registro
- Si usted ya está registrado, ingrese a la consola AppHQ y cree una aplicación desde App Manager-> enlace App Create
- Descargue el proyecto desde aquí e impórtelo en eclipse
- Abra el archivo MainActivity.java y pase la información requerida en el método onCreate como se muestra abajo (application keys for AppHq console)
- Cambie el nombre de la aplicación con el nombre de su aplicación en res/strings (útil para guardar imágenes en SD Card)
- Construya y opere la aplicación.
App42API.initialize(this,"App42 API key","App42 secret Key");
Detalles de diseño
Obtenga una imagen desde Android SD Card Gallery: Obtenga una imagen de su aplicación desde Android SD Card con el código escrito en el archivo MainActivity.java.
/*
* Call when user clicks on browse photo
*/
private void browsePhoto(String imageName) {
if (this.imageName != null && !this.imageName.equals(""))
this.imageName = imageName;
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERN
AL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
}
/*
* Callback when user select image from gallery for upload
* get a callback
* @see android.app.Activity#onActivityResult(int, int,
* android.content.Intent)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
progressDialog.setMessage("uploading image");
progressDialog.show();
uploadImage(picturePath);
}
}
Suba una imagen usando el servicio App42 Upload: Si quiere subir una imagen al servidor desde la galería de Android Sd Card, puede seguir el código escrito en el archivo MainActivity.java.
private void uploadImage(String imagePath) {
App42API.buildUploadService().uploadFile(imageName, imagePath,
UploadFileType.IMAGE, Description, new App42CallBack() {
public void onSuccess(Object uploadObj) {
// TODO Auto-generated method stub
onUploadResult(uploadObj);
}
public void onException(Exception ex) {
// TODO Auto-generated method stub
System.out.println(ex);
onUploadError(ex);
}
});
}
Comparta imágenes a sus amigos: Si quiere compartir una imagen con sus amigos usando varias aplicaciones instaladas en su dispositivo, puede seguir el código escrito en el archivo MainActivity.java.
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Hey friends checkout this image"+"\n\n"+imageUrl);
intent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Check My Image ");
startActivity(Intent.createChooser(intent, "Share"));
Cargar y cachear imágenes: el archivo ImageCacher.java contiene todo tipo de codificación, la cual por lo tanto es requerida para compartir una imagen desde la web o cache.
Si quiere cargar una imagen sin muestra usted debe usar el tipo de archivo Android Activity, aquí está el código:
ImageView imgLogo = (ImageView) findViewById(R.id.my_image);
ImageCacher imageCacher=new ImageCacher(this, -1);
imageCacher.loadImage(imageUrl, imgLogo);
Si quiere cargar una imagen como muestra que pueda ser usada en su tipo de archivo Android Activity, por favor use el código de abajo
ImageView imgLogo = (ImageView) findViewById(R.id.my_image);
ImageCacher imageCacher=new ImageCacher(this, SamplingImageSize);
imageCacher.loadImage(imageUrl, imgLogo);
Si quiere cargar una imagen desde la web o chache, debe seguir el código de abajo
public Bitmap getBitmap(String url) {
String filename = String.valueOf(url.hashCode());
File f = new File(cacheDir, filename);
// from SD cache
Bitmap b;
if (isSamplingReq) {
b = decodeWithoutSampling(f);
} else {
b = decodewithSampleing(f);
}
if (b != null)
return b;
// from web
try {
Bitmap bitmap = null;
InputStream is = new URL(url).openStream();
OutputStream os = new FileOutputStream(f);
Utility.CopyStream(is, os);
os.close();
if (isSamplingReq) {
bitmap = decodeWithoutSampling(f);
} else {
bitmap = decodewithSampleing(f);
}
return bitmap;
} catch (Throwable ex) {
ex.printStackTrace();
if (ex instanceof OutOfMemoryError)
clearCache();
return null;
}
}
Código para muestreo de imágenes
private Bitmap decodewithSampleing(File f) {
try {
// decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < requiredSize
|| height_tmp / 2 < requiredSize)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
}
return null;
}
Código sin muestreo
private Bitmap decodeWithoutSampling(File f) {
try {
return BitmapFactory.decodeStream(new FileInputStream(f));
} catch (Exception e) {
}
return null;
}
Guardar imágenes en SD Card Gallery: Si quiere guardar una imagen en Android SD Card Gallery, puede seguir el código escrito en el archivo MainActivity.java.
void saveMyImage() {
Bitmap bmImg = imageCacher.getBitmap(imageUrl);
File filename;
try {
String path1 = android.os.Environment.getExternalStorageDirectory()
.toString();
Log.i("in save()", "after mkdir");
File file = new File(path1 + "/" + appName);
if (!file.exists())
file.mkdirs();
filename = new File(file.getAbsolutePath() + "/" + imageName
+ ".jpg");
Log.i("in save()", "after file");
FileOutputStream out = new FileOutputStream(filename);
Log.i("in save()", "after outputstream");
bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
Log.i("in save()", "after outputstream closed");
//File parent = filename.getParentFile();
ContentValues image = getImageContent(filename);
Uri result = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
Toast.makeText(getApplicationContext(),
"File is Saved in " + filename, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
public ContentValues getImageContent(File parent) {
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, appName);
image.put(Images.Media.DISPLAY_NAME, imageName);
image.put(Images.Media.DESCRIPTION, "App Image");
image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
image.put(Images.Media.MIME_TYPE, "image/jpg");
image.put(Images.Media.ORIENTATION, 0);
image.put(Images.ImageColumns.BUCKET_ID, parent.toString()
.toLowerCase().hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName()
.toLowerCase());
image.put(Images.Media.SIZE, parent.length());
image.put(Images.Media.DATA, parent.getAbsolutePath());
return image;
}
En este blog, hemos explicado acerca de subir, cacheo, guardar y compartir imágenes en aplicaciones Android.
Si tiene alguna duda o necesita asistencias más adelante, por favor contáctenos a support@shephertz.com
Pengunggahan gambar
Pertama, unggah sebuah gambar dari SD card Android ke server sehingga mendapatkan Web URL untuk melakukan operasi kepada gambar seperti Sharing. Dalam hal ini, kami menggunakan layanan App42 untuk mengunggah gambar pada server
Caching Gambar
Ketika kamu membuat applikasi pada hp atau web, kamu harus yakin bahwa aplikasi tersebut beroperasi secepat mungkin. Untuk hal ini, caching (Tembolok) memegang peranan penting. Jika anda menggunakan sumber daya tertentu dalam aplikasi anda, kamu harus tahu bahwa tidak mudah untuk diambil kembali. Saya menggunakan algoritma LruCahce untuk mengimplementasikan mekanisme ini.
LRUCache
LRU adalah kepanjagan dari Least Recently Used. Istilah itu tersebut sendiri menjelaskan bagaimana Cache akan bekerja. LUCaches memiliki ukuran Cache yang paten dan bekerja seperti nomor antrian. Jika sebuah objek ditambahkan ke sebuah Cache, maka akan ditempatkan pada nomor antrian yang pertama. Selanjutnya, ketika aplikasi meminta sebuah objek dari Cache, maka objek tersebut akan ditempatkan pada awal antrian. Dengan cara ini objek LRU ditinggalkan pada titik awal antrian.
Sampling gambar
Saat memuat gambar dari sebuah web, resolusinya bisa lebih besar daripada perangkat. Sampling dapat memberikan solusi untuk memuat dan mengooptimalkan memori.
Berbagi Gambar
Menggunakan gambar didalam aplikasi dari gallery dan membagikannya dengan kontak yang kamu miliki akan menambah ‘user engagement’ pada android
Penghematan Gambar
Setelah memuat gambar dari web, jika kamu ingin menyimpannya, maka kamu bisa melakukannya di SD card untuk pemakaian lebih lanjut.
Cara mengaplikasikan Sample
- Register with App42 Platform.
- Buatlah satu aplikasi ketika kamu berada pada laman Quick-star setelah registrasi.
- Jika kamu telah teregistrasi, silahkan Login ke konsol AppHQ dan buatlah aplikasi dari App Manager -> App Create Link
- Download projek dari SINI dan import kedalam ECLISPE
- Buka file MainActivity.java lalu berikan informasi yang dibutuhkan didalam Metode OnCreate seperti yang digambarkan dibawah ini (tombol aplikasi untuk konsol AppHQ)
[code java]App42API.initialize(this,"App42 API key","App42 secret Key");[/code]
- Ganti nama aplikasi sesuai dengan apa yang kamu inginkan didalam res/strings (berguna untuk menyimpan gambar di SD Card
- Buat dan jalankan aplikasinya
Detail Desain
Dapatkan gambar dari galeri SD Card Android: Dapatkan gambar untuk aplikasimu dari SD Card Android dengan kode yang tertulis di file MainActivity.java.
[code java] /*
* Call when user clicks on browse photo
*/
private void browsePhoto(String imageName) {
if (this.imageName != null && !this.imageName.equals(""))
this.imageName = imageName;
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERN
AL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
}
/*
* Callback when user select image from gallery for upload
* get a callback
* @see android.app.Activity#onActivityResult(int, int,
* android.content.Intent)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
progressDialog.setMessage("uploading image");
progressDialog.show();
uploadImage(picturePath);
}
}[/code]
Mengupload gambar dengan menggunakan App42 Upload Service: Jika kamu ingin mengupload sebuah gambar pada sarver dari galeri SD card android, kamu bisa mengikuti kode yang tertulis di file MainActivity.java.
[code java]private void uploadImage(String imagePath) {
App42API.buildUploadService().uploadFile(imageName, imagePath,
UploadFileType.IMAGE, Description, new App42CallBack() {
public void onSuccess(Object uploadObj) {
// TODO Auto-generated method stub
onUploadResult(uploadObj);
}
public void onException(Exception ex) {
// TODO Auto-generated method stub
System.out.println(ex);
onUploadError(ex);
}
});
}[/code]
Membagikan Gambar ke Teman : Jika kamu ingin membagikan gambar dengan teman-temanmu dengan menggunakan beberapa aplikasi dalam perangkatmu, kamu bisa mengikuti kode yang tertulis di file MainActivity.java.
[code java]Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Hey friends checkout this image"+"\n\n"+imageUrl);
intent.putExtra(android.content.Intent.EXTRA_SUBJECT,
"Check My Image ");
startActivity(Intent.createChooser(intent, "Share"));[/code]
Loading dan Caching of Image: File ImageCahcer.java berisi segala tipe coding yang diperlukan untuk berbagi gambar dari web atau cache yang sesuai.
Jika kamu ingin memuat gambar tanpa sampling yang membutuhkan file Android Activity kami, berikut kodenya:
[code java]ImageView imgLogo = (ImageView) findViewById(R.id.my_image);
ImageCacher imageCacher=new ImageCacher(this, -1);
imageCacher.loadImage(imageUrl, imgLogo);[/code]
Jika kamu ingin memuat gambar dengan sampling yang bisa digunakan dalam Android Activity kamu, silahkan ikuti kode dibawah ini:
[code java]ImageView imgLogo = (ImageView) findViewById(R.id.my_image);
ImageCacher imageCacher=new ImageCacher(this, SamplingImageSize);
imageCacher.loadImage(imageUrl, imgLogo);[/code]
Jika kamu ingin memuat gambar dari web atau Cache, kamu harus ikuti kode ini:
[code java]public Bitmap getBitmap(String url) {
String filename = String.valueOf(url.hashCode());
File f = new File(cacheDir, filename);
// from SD cache
Bitmap b;
if (isSamplingReq) {
b = decodeWithoutSampling(f);
} else {
b = decodewithSampleing(f);
}
if (b != null)
return b;
// from web
try {
Bitmap bitmap = null;
InputStream is = new URL(url).openStream();
OutputStream os = new FileOutputStream(f);
Utility.CopyStream(is, os);
os.close();
if (isSamplingReq) {
bitmap = decodeWithoutSampling(f);
} else {
bitmap = decodewithSampleing(f);
}
return bitmap;
} catch (Throwable ex) {
ex.printStackTrace();
if (ex instanceof OutOfMemoryError)
clearCache();
return null;
}
}[/code]
Kode untuk Sampling Gambar:
[code java]private Bitmap decodewithSampleing(File f) {
try {
// decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while (true) {
if (width_tmp / 2 < requiredSize
|| height_tmp / 2 < requiredSize)
break;
width_tmp /= 2;
height_tmp /= 2;
scale *= 2;
}
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
}
return null;
}[/code]
Kode Tanpa Sampling:
[code java]private Bitmap decodeWithoutSampling(File f) {
try {
return BitmapFactory.decodeStream(new FileInputStream(f));
} catch (Exception e) {
}
return null;
}[/code]
Menyimpan gambar di Galeri SD Card: jika kamu ingin menyimpan gambar di galeri SD card Android, kamu dapat mengikuti kode yang tertulis di file MainActivity.java
[code java]void saveMyImage() {
Bitmap bmImg = imageCacher.getBitmap(imageUrl);
File filename;
try {
String path1 = android.os.Environment.getExternalStorageDirectory()
.toString();
Log.i("in save()", "after mkdir");
File file = new File(path1 + "/" + appName);
if (!file.exists())
file.mkdirs();
filename = new File(file.getAbsolutePath() + "/" + imageName
+ ".jpg");
Log.i("in save()", "after file");
FileOutputStream out = new FileOutputStream(filename);
Log.i("in save()", "after outputstream");
bmImg.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
Log.i("in save()", "after outputstream closed");
//File parent = filename.getParentFile();
ContentValues image = getImageContent(filename);
Uri result = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, image);
Toast.makeText(getApplicationContext(),
"File is Saved in " + filename, Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
public ContentValues getImageContent(File parent) {
ContentValues image = new ContentValues();
image.put(Images.Media.TITLE, appName);
image.put(Images.Media.DISPLAY_NAME, imageName);
image.put(Images.Media.DESCRIPTION, "App Image");
image.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
image.put(Images.Media.MIME_TYPE, "image/jpg");
image.put(Images.Media.ORIENTATION, 0);
image.put(Images.ImageColumns.BUCKET_ID, parent.toString()
.toLowerCase().hashCode());
image.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, parent.getName()
.toLowerCase());
image.put(Images.Media.SIZE, parent.length());
image.put(Images.Media.DATA, parent.getAbsolutePath());
return image;
}[/code]
Didalam blog ini, saya telah menjelaskan tentang uploading, Cahcing, saving, dan sharing sebuah gambar didalam android.
Jika kamu memiliki pertanyaan lebih lanjut, silahkan hubungi kami di support@shephertz.com
Comment
WOW just what I was searching for. Came here by searching for image Caching
in android
Have a look at my website: World of Warships Aimbot