آموزش فشرده سازی عکس در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش فشرده سازی عکس در برنامه نویسی اندروید می پردازیم فشرده سازی یکی از پر اهمیت ترین کار شاید در ایران به حساب بیاید در این سال ها که اینترنت به اندازه ای در ایران کمی پیشرفت کرد اما هنوز مشکل کمبود سرعت در ایران حس می شود بهترین کار برای نمایش عکس یا دیتا فشرده سازی آن است یعنی هر دیتایی را بتوانیم فشرده کنیم سپس دریافت کنیم بهترین ایده برای انجام کار ها با سرعت بالا است و از نظر دیگر باعث کاهش حجم می شود برنامه های بزرگی مانند تلگرام و اینستاگرام قبل از آپلود عکس آن را فشرده کرده سپس آپلود می کنند اگر بخواهیم حساب کنیم این فشرده سازی خیلی برای آنها باصرفه است ! در ادامه با ما همراه باشید تا نحوه فشرده سازی را فراگیرید.
ابتدا ما باید عکس خود را به Bitmap تبدیل کنیم برای اینکار می توانیم مثل زیر عمل کنیم.
اولین روش به دست آوردن Bitmap از مسیر فایل
1 2 3 4 5 | File sd = Environment.getExternalStorageDirectory(); File image = new File(sd, "1.png"); BitmapFactory.Options bmOptions = new BitmapFactory.Options(); Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions); bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); |
در اینجا ما فقط عکس خودمان را تبدیل به bitmap کردیم.
روش دوم به دست آوردن Bitmap از ImageView
1 2 3 | ImageView imageView =(ImageView)findViewById(R.id.imageView); imageView.buildDrawingCache(); Bitmap bmap = imageView.getDrawingCache(); |
بعد از اینکه Bitmap را به دست آوردیم حالا زمان فشرده سازی آن است البته ما بر اساس نوع فایل که Png یا Jpg باشد باید فشرده سازی را انجام دهیم.
اگر عکس png بود همانند زیر می شود.
1 | bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); |
اگر عکس Jpeg یا Jpg بود همانند زیر می شود.
1 | bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); |
برای اینکه عکس را دریافت کنیم باید به شکل زیر عمل کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 | File sd = Environment.getExternalStorageDirectory(); File image = new File(sd, "1.png"); BitmapFactory.Options bmOptions = new BitmapFactory.Options(); Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(),bmOptions); bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true); Bitmap bitmap2; byte[] BYTE; ByteArrayOutputStream bytearrayoutputstream; bytearrayoutputstream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytearrayoutputstream); BYTE = bytearrayoutputstream.toByteArray(); bitmap2 = BitmapFactory.decodeByteArray(BYTE,0,BYTE.length); imageview.setImageBitmap(bitmap2); |
فشرده سازی عکس تمام شد و در ImageView قرار گرفت
این آموزش هم به پایان رسید
موفق باشید.
سلام استاد عزیز ممنون از اموزش خوبتان
خدا قوت
استاد عزیز بنده مشابه این سوال را هم در اموزش اپلود مطرح کردم در اپلود با استفاده از multi part بنده می خواهم یک عکس را از گالری انتخاب کنم ان عکس فشرده شود و ارسال شود اگر درست حدس زده باشم باید ان عکس را انتخاب کنم و بعد در حافظه کش ان را فشرده کنم و بعد ادرس ان را بگیرم و به متد های مربوطه جهت اپلود ادرس را بفرستم تا فرستاده شوند و بعد هم که عکس فشرده شده از کش فکر کنم اتوماتیک پاک می شود ممنون می شوم شیوه ی ادغام این کار یعنی فشرده سازی و استفاده از ان در قسمت اپلود تصویر به سرور را توضیح بفرمایید.
سپاس
یک سوال دیگر استاد عزیز اگر بخواهیم هر نوع عکسی را کاربر بتواند ارسال کند چه چه png چه jpeg یا هر مدل دیگری در این حالت باید به چه صورتی عمل کنیم؟
سلام در وب سایت جستجو کنید آموزش ها قرار دارد.
بسیار عالی.
ولی مشکل اینجاست که اینکار رو انجام میدم، کیفیت پایین میاد ولی حجم عکس هنوز بالاست!
چه باید کرد؟
از api های سایت های مختلف برای فشرده سازی استفاده کنید.
از این کتابخونه استفاده کن
compile ‘id.zelory:compressor:2.1.0’
سلام
میشه لطفا راهنمایی کنید چون مییخوام توی برنامه ام کاربر هر عکسی با هر سایزی را که میخواد به سمت سرور ارسال کنه اول اندازه عکس مثلا به سایز 200*200 تغییر کنه و بعد ارسال بشه .
سلام
واژه glide را در سایت جستجو کنید آموزش فشرده سازی و crop کردن فایل قرار داده شده است از لینک زیر همی می تونید به آن دسترسی بگیرید.
https://programchi.ir/2017/07/10/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-%da%a9%d8%a7%d8%b1-%d8%a8%d8%a7-%da%a9%d8%aa%d8%a7%d8%a8-%d8%ae%d8%a7%d9%86%d9%87-glide-%d8%af%d8%b1-%d8%a8%d8%b1%d9%86%d8%a7%d9%85%d9%87-%d9%86%d9%88%db%8c%d8%b3%db%8c/
موفق باشید.
ممنونم
اموزشتون عالیه خدا قوت