How Can I Save An Image From A Url?
I'm setting an ImageView using setImageBitmap with an external image url. I would like to save the image so it can be used later on even if there is no internet connection. Where a
Solution 1:
URLimageurl=newURL("http://mysite.com/me.jpg");
Bitmapbitmap= BitmapFactory.decodeStream(imageurl.openConnection().getInputStream());
This code will help you in generating the bitmap from the image url.
This question answers the second part.
Solution 2:
You have to save it in SD card or in your package data, because on runtime you only have access to these. To do that this is a good example
URLurl=newURL ("file://some/path/anImage.png");
InputStreaminput= url.openStream();
try {
//The sdcard directory e.g. '/sdcard' can be used directly, or //more safely abstracted with getExternalStorageDirectory()FilestoragePath= Environment.getExternalStorageDirectory();
OutputStreamoutput=newFileOutputStream (storagePath + "/myImage.png");
try {
byte[] buffer = newbyte[aReasonableSize];
intbytesRead=0;
while ((bytesRead = input.read(buffer, 0, buffer.length)) >= 0) {
output.write(buffer, 0, bytesRead);
}
} finally {
output.close();
}
} finally {
input.close();
}
Source : How do I transfer an image from its URL to the SD card?
Solution 3:
If you are using Kotlin and Glide in your app then this is for you:
Glide.with(this)
.asBitmap()
.load(imageURL)
.into(object : SimpleTarget<Bitmap>(1920, 1080) {
overridefunonResourceReady(bitmap: Bitmap, transition: Transition<inBitmap>?) {
saveImage(bitmap)
}
})
and this is that function
internalfunsaveImage(image: Bitmap) {
val savedImagePath: String
val imageFileName = System.currentTimeMillis().toString() + ".jpg"val storageDir = File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).toString() + "/Folder Name")
var success = trueif (!storageDir.exists()) {
success = storageDir.mkdirs()
}
if (success) {
val imageFile = File(storageDir, imageFileName)
savedImagePath = imageFile.absolutePath
try {
val fOut = FileOutputStream(imageFile)
image.compress(Bitmap.CompressFormat.JPEG, 100, fOut)
fOut.close()
} catch (e: Exception) {
e.printStackTrace()
}
galleryAddPic(savedImagePath)
}
}
privatefungalleryAddPic(imagePath: String) {
val mediaScanIntent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
val f = File(imagePath)
val contentUri = FileProvider.getUriForFile(applicationContext, packageName, f)
mediaScanIntent.data = contentUri
sendBroadcast(mediaScanIntent)
}
galleryAddPic()
is used to see the image in a phone gallery.
Note: now if you face file uri exception then this can help you.
Solution 4:
you can save image in sdcard and you can use that image in future without internet.
see this tutorial will show how to store image and again read it.
Hope this will help you.....!
Solution 5:
May be its will help someone like me one day
newSaveImage().execute(mViewPager.getCurrentItem());//calling functionprivatevoidsaveImage(int currentItem) {
StringstringUrl= Site.BASE_URL + "socialengine/" + allImages.get(currentItem).getMaster();
Utils.debugger(TAG, stringUrl);
HttpURLConnectionurlConnection=null;
try {
URLurl=newURL(stringUrl);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
FilesdCardRoot= Environment.getExternalStorageDirectory().getAbsoluteFile();
StringfileName= stringUrl.substring(stringUrl.lastIndexOf('/') + 1, stringUrl.length());
StringfileNameWithoutExtn= fileName.substring(0, fileName.lastIndexOf('.'));
FileimgFile=newFile(sdCardRoot, "IMG" + System.currentTimeMillis() / 100 + fileName);
if (!sdCardRoot.exists()) {
imgFile.createNewFile();
}
InputStreaminputStream= urlConnection.getInputStream();
inttotalSize= urlConnection.getContentLength();
FileOutputStreamoutPut=newFileOutputStream(imgFile);
intdownloadedSize=0;
byte[] buffer = newbyte[2024];
intbufferLength=0;
while ((bufferLength = inputStream.read(buffer)) > 0) {
outPut.write(buffer, 0, bufferLength);
downloadedSize += bufferLength;
Utils.debugger("Progress:", "downloadedSize:" + Math.abs(downloadedSize*100/totalSize));
}
outPut.close();
//if (downloadedSize == totalSize);//Toast.makeText(context, "Downloaded" + imgFile.getPath(), Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
}
}
privateclassSaveImageextendsAsyncTask<Integer, Void, String> {
@Overrideprotected String doInBackground(Integer... strings) {
saveImage(strings[0]);
return"saved";
}
@OverrideprotectedvoidonPostExecute(String s) {
Toast.makeText(context, "" + s, Toast.LENGTH_SHORT).show();
}
}
Post a Comment for "How Can I Save An Image From A Url?"