En éste artículo vamos a ver como cojer una imagen de internet, y guardarla en la SD en formato PNG o JPEG. Para ello utilizaremos un EditText para poner la URL de la imagen, y 3 botones: Un load para cargar la imagen en un ImageView, y 2 botones para guardar la imagen en PNG o JPEG.
Ésta imagen se guardará en el directorio PICTURES de la SD.
Primero de todo, creamos el layout que contendrá lo siguiente:
main.xml (en la carpeta res/layout)
Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Entra una URL"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editTextURL"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</EditText>
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="BLoad"//Con onClick nos evitamos implementar la clase
//onClickListener en la clase o el botón
android:text="Load" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="buttonPNG"
android:text="Save as PNG" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="buttonJPG"
android:text="Save as JPG" />
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/imgView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.87"
/>
</LinearLayout>
Seguidamente ponemos los permisos necesarios en AndroidManifest:
Código:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Estas lineas se ponen después de la versión de SDK, concretamente esta linea:
Código:
<uses-sdk android:minSdkVersion="8" />
Hecho esto, ya podemos crear el código java necesario para hacer lo mencionado:
Código:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class UF2_ACT1Activity extends Activity {
private TextView url;
private ImageView imgView;
Bitmap bmp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
url = (TextView) findViewById(R.id.editTextURL);
imgView = (ImageView) findViewById(R.id.imgView);
}
//Método que se ejecuta al pulsar el botón Load
public void BLoad(View view){
try {
URL urlImagen = new URL(url.getText().toString());
URLConnection urlConn = urlImagen.openConnection();
InputStream entrada = urlConn.getInputStream();
bmp = BitmapFactory.decodeStream(entrada);
imgView.setImageBitmap(bmp);
} catch (MalformedURLException e) {
Toast.makeText(getApplicationContext(), "URL incorrecta", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "URL incorrecta", Toast.LENGTH_SHORT).show();
}
}
//Método que se ejecuta al pulsar el botón Save as PNG
public void buttonPNG(View view){
String path = Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_PICTURES;
File folder = new File(path);//Metemos la carpeta PICTURES en un File
folder.mkdirs();//Si no existe la carpeta la creamos
String name = url.getText().toString().substring(url.getText().toString().lastIndexOf("/") + 1);
name = name.substring(0, name.lastIndexOf("."));//Cojemos el nombre de la imagen
File file = new File(path + File.separator + name + ".png");
try {
file.createNewFile();
FileOutputStream out = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);//Convertimos la imagen a PNG
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "Hecho!", Toast.LENGTH_SHORT).show();
}
////Método que se ejecuta al pulsar el botón Save as JPG
public void buttonJPG(View view){
String path = Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_PICTURES;
File folder = new File(path);
folder.mkdirs();
String name = url.getText().toString().substring(url.getText().toString().lastIndexOf("/") + 1);
name = name.substring(0, name.lastIndexOf("."));
File file = new File(path + File.separator + name + ".jpg");
try {
file.createNewFile();
FileOutputStream out = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.JPEG, 100, out);//Convertimos la imagen a JPEG
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(getApplicationContext(), "Hecho!", Toast.LENGTH_SHORT).show();
}
}
Una vez insertemos una URL en el EditText, la carguemos con el botón Load, y la guardemos, la encontraremos en la carpeta PICTURES de la SD.