Сохранить изображение из webView

Интерфейс, диалоги, темы, стили, меню
Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Сохранить изображение из webView

Сообщение Nik » 03 дек 2013, 14:06

не подскажите где почитать про сохранение изображений из webView. Как это все реализовать?


Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 04 дек 2013, 15:01

Помогите с кодом. Программа запускается но сохранять не хочет изображение. Возможно неправильно вызываю метод

Код: Выделить всё

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;

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: Сохранить изображение из webView

Сообщение adarash » 04 дек 2013, 15:28

вместо " SavePicture(webView1); " вставь "String str =SavePicture(webView1); Log.d("t1",str);" И посмотри то, что выведется. Зачем же тебе "try catch" - тогда, если ты ошибку не выводишь?

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 04 дек 2013, 15:57

adarash писал(а):вместо " SavePicture(webView1); " вставь "String str =SavePicture(webView1); Log.d("t1",str);" И посмотри то, что выведется. Зачем же тебе "try catch" - тогда, если ты ошибку не выводишь?
просто код взят с хабра, если бы он работал то "try cath" связка мне и вовсе не нужна. Сейчас попробую ваш совет

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 04 дек 2013, 16:07

Nik писал(а):
adarash писал(а):вместо " SavePicture(webView1); " вставь "String str =SavePicture(webView1); Log.d("t1",str);" И посмотри то, что выведется. Зачем же тебе "try catch" - тогда, если ты ошибку не выводишь?
просто код взят с хабра, если бы он работал то "try cath" связка мне и вовсе не нужна. Сейчас попробую ваш совет
ругает вот на это как я понял
12-04 13:05:16.655: D/t1(1722): /storage/sdcard/201311413516.jpg: open failed: EACCES (Permission denied)
12-04 13:07:55.351: W/InputMethodManagerService(990): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@417edb30 attribute=null, token = android.os.BinderProxy@418dfd08

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: Сохранить изображение из webView

Сообщение adarash » 04 дек 2013, 16:10

поясняю тебе нужно разрешение <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
У твоего приложения нету прав для того, что бы писать на карту памяти.
"try catch" для того и нужен - что бы понять где ты накосячил...
не пренебрегай выводом ошибок - это очень не хорошо.

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 04 дек 2013, 16:25

adarash писал(а):поясняю тебе нужно разрешение <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
У твоего приложения нету прав для того, что бы писать на карту памяти.
"try catch" для того и нужен - что бы понять где ты накосячил...
не пренебрегай выводом ошибок - это очень не хорошо.
а куда вывод ошибок уходит? это лог ведь, где его смотреть?

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 04 дек 2013, 17:02

С выводом разобрался теперь другая проблема). после создания файла. он не может его открыть к сожалению(
подскажите в какую сторону копать

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Сохранить изображение из webView

Сообщение WizikTLT » 04 дек 2013, 17:07

Ошибки? Логи?

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 04 дек 2013, 17:15

WizikTLT писал(а):Ошибки? Логи?
12-04 18:12:18.265: D/dalvikvm(16426): GC_EXTERNAL_ALLOC freed 305K, 51% free 2574K/5191K, external 2457K/2461K, paused 43ms
можете объяснить что говорит мое устройство?

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Сохранить изображение из webView

Сообщение WizikTLT » 04 дек 2013, 17:24

Точно не могу сказать - похоже что-то с памятью, может быть ты как то не верно загружаешь изображение и забиваешь всю память.

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 04 дек 2013, 17:45

WizikTLT писал(а):Точно не могу сказать - похоже что-то с памятью, может быть ты как то не верно загружаешь изображение и забиваешь всю память.
Файл который создается весит 0 байт. следовательно он неправильно создается.
12-04 18:40:16.578: D/dalvikvm(32737): GC_EXPLICIT freed 302K, 21% free 2104K/2631K, external 408K/517K, paused 32ms
12-04 18:40:16.874: W/PowerManagerService(1489): Timer 0x7->0x3|0x0
12-04 18:40:16.874: I/PowerManagerService(1489): Ulight 7->3|0
12-04 18:40:19.242: D/InputReader(1489): Input event: value=1
12-04 18:40:19.242: I/PowerManagerService(1489): Ulight 3->7|0
12-04 18:40:19.249: I/InputDispatcher(1489): Delivering key to current input target
12-04 18:40:19.531: D/InputReader(1489): Input event: value=0
12-04 18:40:19.531: I/InputDispatcher(1489): Delivering key to current input target
12-04 18:40:21.929: I/InputReader(1489): dispatchTouch::touch event's action is 0
12-04 18:40:21.929: I/InputDispatcher(1489): Delivering touch to current input target
12-04 18:40:22.242: I/InputReader(1489): dispatchTouch::touch event's action is 1
12-04 18:40:22.242: I/InputDispatcher(1489): Delivering touch to current input target
12-04 18:40:22.335: W/InputManagerService(1489): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40715f68
12-04 18:40:25.289: D/dalvikvm(32745): GC_EXPLICIT freed 6K, 15% free 1816K/2115K, external 408K/517K, paused 21ms
как то так

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Сохранить изображение из webView

Сообщение WizikTLT » 04 дек 2013, 17:49

Ну тогда наверно стоит выложить код создания изображения ? =)

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 04 дек 2013, 17:52

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

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 05 дек 2013, 12:17

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 "";
	    }
Возможно проблема в этом месте - Bitmap bitmap = (Bitmap) webView1.getDrawingCache();

потому что копипастил чужой код
а там было вот что Bitmap bitmap = (BitmapDrawable) iv.getDrawable().getBitmap();
НО на эту шляпу еклипс ругался безбожно

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 05 дек 2013, 16:03

если так трудно понимаемо вот проект.
Вложения
Fon.rar
(1.23 МБ) 251 скачивание

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

Re: Сохранить изображение из webView

Сообщение WizikTLT » 05 дек 2013, 17:07

Код: Выделить всё

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);
	       }
		
	    }
Попробуй так - не получится напиши что в лог выводит (при проверке я сохранял не на sdcard, а во внутреннее хранилище - все отлично сохранилось)

p.s был занят вот и не отвечал =)

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 05 дек 2013, 17:18

WizikTLT писал(а):

Код: Выделить всё

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);
	       }
		
	    }
Попробуй так - не получится напиши что в лог выводит (при проверке я сохранял не на sdcard, а во внутреннее хранилище - все отлично сохранилось)

p.s был занят вот и не отвечал =)
Блин огромаднейшее спасибо тебе решился вопрос)

Nik
Сообщения: 63
Зарегистрирован: 08 ноя 2013, 21:17
Откуда: Pyatigorsk
Контактная информация:

Re: Сохранить изображение из webView

Сообщение Nik » 05 дек 2013, 17:21

WizikTLT писал(а):

Код: Выделить всё

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);
	       }
		
	    }
Попробуй так - не получится напиши что в лог выводит (при проверке я сохранял не на sdcard, а во внутреннее хранилище - все отлично сохранилось)

p.s был занят вот и не отвечал =)
а можно еще вопрос по коду?

Код: Выделить всё

Picture picture = webView1.capturePicture();
вот в этом месте .capturePicture(); эклипс зачеркивает? почему? и говорит на сколько понимаю английский что устарела.

Ответить