Сохранить изображение из webView
Добавлено: 03 дек 2013, 14:06
не подскажите где почитать про сохранение изображений из webView. Как это все реализовать?
Добро пожаловать на форум сайта
http://forum.startandroid.ru/
Код: Выделить всё
package cd.fon;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.text.format.Time;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
public class MainActivity extends Activity {
WebView webView1;
final int MENU_SAVE_ID = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView1 = (WebView)findViewById(R.id.webView1);
webView1.loadUrl("http://moloca.ucoz.net/main_256.jpg");
}
String folderToSave = Environment.getExternalStorageDirectory().toString();
private String SavePicture (WebView webView1) {
OutputStream fOut = null;
Time time = new Time();
time.setToNow();
try {
File file = new File(folderToSave, Integer.toString(time.year) + Integer.toString(time.month) + Integer.toString(time.monthDay) + Integer.toString(time.hour) + Integer.toString(time.minute) + Integer.toString(time.second) +".jpg"); // создать уникальное имя для файла основываясь на дате сохранения
fOut = new FileOutputStream(file);
Bitmap bitmap = (Bitmap) webView1.getDrawingCache();
bitmap.compress(Bitmap.CompressFormat.JPEG, 0, fOut); // сохранять картинку в jpeg-формате с 85% сжатия.
fOut.flush();
fOut.close();
MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName()); // регистрация в фотоальбоме
}
catch (Exception e){
return e.getMessage();
}return "";
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
menu.add(0, MENU_SAVE_ID, 0, "SAVE");
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case MENU_SAVE_ID:
SavePicture(webView1);
}
return false;
}}Код: Выделить всё
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case MENU_SAVE_ID:
SavePicture(webView1);
}
return false;просто код взят с хабра, если бы он работал то "try cath" связка мне и вовсе не нужна. Сейчас попробую ваш советadarash писал(а):вместо " SavePicture(webView1); " вставь "String str =SavePicture(webView1); Log.d("t1",str);" И посмотри то, что выведется. Зачем же тебе "try catch" - тогда, если ты ошибку не выводишь?
ругает вот на это как я понялNik писал(а):просто код взят с хабра, если бы он работал то "try cath" связка мне и вовсе не нужна. Сейчас попробую ваш советadarash писал(а):вместо " SavePicture(webView1); " вставь "String str =SavePicture(webView1); Log.d("t1",str);" И посмотри то, что выведется. Зачем же тебе "try catch" - тогда, если ты ошибку не выводишь?
а куда вывод ошибок уходит? это лог ведь, где его смотреть?adarash писал(а):поясняю тебе нужно разрешение <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
У твоего приложения нету прав для того, что бы писать на карту памяти.
"try catch" для того и нужен - что бы понять где ты накосячил...
не пренебрегай выводом ошибок - это очень не хорошо.
12-04 18:12:18.265: D/dalvikvm(16426): GC_EXTERNAL_ALLOC freed 305K, 51% free 2574K/5191K, external 2457K/2461K, paused 43msWizikTLT писал(а):Ошибки? Логи?
Файл который создается весит 0 байт. следовательно он неправильно создается.WizikTLT писал(а):Точно не могу сказать - похоже что-то с памятью, может быть ты как то не верно загружаешь изображение и забиваешь всю память.
ВотWizikTLT писал(а):Ну тогда наверно стоит выложить код создания изображения ? =)
Код: Выделить всё
public class MainActivity extends Activity {
WebView webView1;
final int MENU_SAVE_ID = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
webView1 = (WebView)findViewById(R.id.webView1);
//отсюда грузим картинку
webView1.loadUrl("http://moloca.ucoz.net/main_256.jpg");
}
// а здесь собственно вся магия
private String SavePicture (WebView webView1) {
OutputStream fOut = null;
Time time = new Time();
time.setToNow();
String folderToSave = Environment.getExternalStorageDirectory().toString();
try {
File file = new File(folderToSave, Integer.toString(time.year) + Integer.toString(time.month) + Integer.toString(time.monthDay) + Integer.toString(time.hour) + Integer.toString(time.minute) + Integer.toString(time.second) +".jpg"); // создать уникальное имя для файла основываясь на дате сохранения
fOut = new FileOutputStream(file);
Bitmap bitmap = (Bitmap) webView1.getDrawingCache();
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); // сохранять картинку в jpeg-формате с 85% сжатия.
fOut.flush();
fOut.close();
MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName()); // регистрация в фотоальбоме
}
catch (Exception e){
return e.getMessage();
}
return "";
}Возможно проблема в этом месте - Bitmap bitmap = (Bitmap) webView1.getDrawingCache();Nik писал(а):ВотWizikTLT писал(а):Ну тогда наверно стоит выложить код создания изображения ? =)Код: Выделить всё
public class MainActivity extends Activity { WebView webView1; final int MENU_SAVE_ID = 1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webView1 = (WebView)findViewById(R.id.webView1); //отсюда грузим картинку webView1.loadUrl("http://moloca.ucoz.net/main_256.jpg"); } // а здесь собственно вся магия private String SavePicture (WebView webView1) { OutputStream fOut = null; Time time = new Time(); time.setToNow(); String folderToSave = Environment.getExternalStorageDirectory().toString(); try { File file = new File(folderToSave, Integer.toString(time.year) + Integer.toString(time.month) + Integer.toString(time.monthDay) + Integer.toString(time.hour) + Integer.toString(time.minute) + Integer.toString(time.second) +".jpg"); // создать уникальное имя для файла основываясь на дате сохранения fOut = new FileOutputStream(file); Bitmap bitmap = (Bitmap) webView1.getDrawingCache(); bitmap.compress(Bitmap.CompressFormat.JPEG, 85, fOut); // сохранять картинку в jpeg-формате с 85% сжатия. fOut.flush(); fOut.close(); MediaStore.Images.Media.insertImage(getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName()); // регистрация в фотоальбоме } catch (Exception e){ return e.getMessage(); } return ""; }
Код: Выделить всё
private void SavePicture (WebView webView1, String folderToSave) {
Picture picture = webView1.capturePicture();
Time time = new Time();
time.setToNow();
Bitmap b = Bitmap.createBitmap( picture.getWidth(),picture.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas( b );
picture.draw( c );
FileOutputStream fos = null;
try
{
File root = Environment.getExternalStorageDirectory();
fos = new FileOutputStream(root+"/"+ Integer.toString(time.year) + Integer.toString(time.month) + Integer.toString(time.monthDay) + Integer.toString(time.hour) + Integer.toString(time.minute) + Integer.toString(time.second) +".jpg");
if ( fos != null )
{
b.compress(Bitmap.CompressFormat.JPEG, 90, fos );
fos.close();
}
}
catch( Exception e )
{
System.out.println("-----error--"+e);
}
}
Блин огромаднейшее спасибо тебе решился вопрос)WizikTLT писал(а):Попробуй так - не получится напиши что в лог выводит (при проверке я сохранял не на sdcard, а во внутреннее хранилище - все отлично сохранилось)Код: Выделить всё
private void SavePicture (WebView webView1, String folderToSave) { Picture picture = webView1.capturePicture(); Time time = new Time(); time.setToNow(); Bitmap b = Bitmap.createBitmap( picture.getWidth(),picture.getHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas( b ); picture.draw( c ); FileOutputStream fos = null; try { File root = Environment.getExternalStorageDirectory(); fos = new FileOutputStream(root+"/"+ Integer.toString(time.year) + Integer.toString(time.month) + Integer.toString(time.monthDay) + Integer.toString(time.hour) + Integer.toString(time.minute) + Integer.toString(time.second) +".jpg"); if ( fos != null ) { b.compress(Bitmap.CompressFormat.JPEG, 90, fos ); fos.close(); } } catch( Exception e ) { System.out.println("-----error--"+e); } }
p.s был занят вот и не отвечал =)
а можно еще вопрос по коду?WizikTLT писал(а):Попробуй так - не получится напиши что в лог выводит (при проверке я сохранял не на sdcard, а во внутреннее хранилище - все отлично сохранилось)Код: Выделить всё
private void SavePicture (WebView webView1, String folderToSave) { Picture picture = webView1.capturePicture(); Time time = new Time(); time.setToNow(); Bitmap b = Bitmap.createBitmap( picture.getWidth(),picture.getHeight(), Bitmap.Config.ARGB_8888); Canvas c = new Canvas( b ); picture.draw( c ); FileOutputStream fos = null; try { File root = Environment.getExternalStorageDirectory(); fos = new FileOutputStream(root+"/"+ Integer.toString(time.year) + Integer.toString(time.month) + Integer.toString(time.monthDay) + Integer.toString(time.hour) + Integer.toString(time.minute) + Integer.toString(time.second) +".jpg"); if ( fos != null ) { b.compress(Bitmap.CompressFormat.JPEG, 90, fos ); fos.close(); } } catch( Exception e ) { System.out.println("-----error--"+e); } }
p.s был занят вот и не отвечал =)
Код: Выделить всё
Picture picture = webView1.capturePicture();