اذهب إلى المحتوى
  • 0

تقليص جودة الصور او ضغط الصور في flutter

Flutter Dev

السؤال

تحيه طيبه للجميع

استعمل المكتبة التأليه من فلاتر لتحميل الصور الى قاعدة البيانات المشكلة ان بعض الصور يصل حجمها الى 3MB 

https://pub.dev/packages/wechat_assets_picker

المشكلة ان الشروحات لهذا المكتبة قليله في الانترنت لم اجد طريقة لتقليل جودة الصور حتى احصل على حجم اقل 

انا استعملها بشكل التالي:

final List<AssetEntity> result = await AssetPicker.pickAssets(context,
        maxAssets: 4,
        pathThumbSize: 84,
        themeColor:CustomColors.ButtonAddImage,

        gridCount: 4,
        selectedAssets: assets,
       
      
    if (result != null) {
      setState(() {
        assets = List<AssetEntity>.from(result);
      });

ياليت اذا احد يعلم طريقة تقليل جودة الصور لتقليل الحجم يفيدنا بطريقة 

شكرا لكم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

أبسط طريقة هي باستخدام مكتبة image_picker، حيث تحتوي خاصية imageQuality وهي قيمة رقمية يمكنك تعديلها بشكل فوري:

ImagePicker imagePicker = ImagePicker();
PickedFile compressedImage = await imagePicker.getImage(
  source: ImageSource.gallery,
  imageQuality: 75,
);

أو يمكنك أيضاً كتابة حد أعظمي لأبعاد الصورة كي لا تتجاوزه بكتابة الخاصيتين maxWidth و maxHeight:

PickedFile compressedImage = await imagePicker.getImage(
  source: ImageSource.gallery,
  maxHeight:  200,
  maxWidth: 200 );
);

وأيضاً يوجد حزمة من الأدوات ضمن مكتبة الصور في لغة البرمجة Dart والتي يمكنك استخدامها مع المكتبة path_provider لتحقيق ذلك، مثال:

import 'package:image/image.dart' as Im;
import 'package:path_provider/path_provider.dart';
import 'dart:math' as Math;

void compressImage() async {
  File originialImage = await ImagePicker.pickImage();
  final tempDir = await getTemporaryDirectory();
  final path = tempDir.path;
  int randomTitle = new Math.Random().nextInt(10000);

  Im.Image image = Im.decodeImage(originialImage.readAsBytesSync());
  Im.Image smallImage = Im.copyResize(image, 500);
  
  var compressedImage = new File('$path/new_$randomTitle.jpg')..writeAsBytesSync(Im.encodeJpg(image, quality: 85));
}

حيث نقوم بضغط الصورة المطلوبة من خلال التابع copyResize وهنا وضعنا القيمة التجريبية 500.

يمكنك الاطلاع على المزيد من التفاصيل والأدوات من توثيق المكتبة image_picker أو حزم التعامل مع الصور ضمن لغة dart.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك استخدام حزمة flutter_image_compress يمكنك العثور عليها من هنا , تعمل هذه الحزمة على ضغط الصورة , وهناك توثيق كامل يمكنك قراءته للتعامل مع هذه المكتبة و هذه المكتبة تعمل على كلا النظامين ios / android ، ويمكنك تثبيت الحزمة في مشروعك من خلال فتح ملف pubspec.ymal من خلال الأمر التالي 

dependencies:
  flutter_image_compress: ^1.0.0-nullsafety

ويمكنك استدعاء  المكتبة في الملف الذي تعمل عليه من خلال 

import 'package:flutter_image_compress/flutter_image_compress.dart';

كذلك تزودك هذه الحزمة ببعض الخصائص للتعامل مع الصورة كخاصية الدوران ( rotate ) ، وخاصية autoCorrectionAngle و خاصية التحكم بجودة الصورة و خاصية العرض و الارتفاع الأقصى للصورة . 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 1/8/2022 at 02:51 قال Sam Ahw:

أبسط طريقة هي باستخدام مكتبة image_picker، حيث تحتوي خاصية imageQuality وهي قيمة رقمية يمكنك تعديلها بشكل فوري:


ImagePicker imagePicker = ImagePicker();
PickedFile compressedImage = await imagePicker.getImage(
  source: ImageSource.gallery,
  imageQuality: 75,
);

أو يمكنك أيضاً كتابة حد أعظمي لأبعاد الصورة كي لا تتجاوزه بكتابة الخاصيتين maxWidth و maxHeight:


PickedFile compressedImage = await imagePicker.getImage(
  source: ImageSource.gallery,
  maxHeight:  200,
  maxWidth: 200 );
);

وأيضاً يوجد حزمة من الأدوات ضمن مكتبة الصور في لغة البرمجة Dart والتي يمكنك استخدامها مع المكتبة path_provider لتحقيق ذلك، مثال:


import 'package:image/image.dart' as Im;
import 'package:path_provider/path_provider.dart';
import 'dart:math' as Math;

void compressImage() async {
  File originialImage = await ImagePicker.pickImage();
  final tempDir = await getTemporaryDirectory();
  final path = tempDir.path;
  int randomTitle = new Math.Random().nextInt(10000);

  Im.Image image = Im.decodeImage(originialImage.readAsBytesSync());
  Im.Image smallImage = Im.copyResize(image, 500);
  
  var compressedImage = new File('$path/new_$randomTitle.jpg')..writeAsBytesSync(Im.encodeJpg(image, quality: 85));
}

حيث نقوم بضغط الصورة المطلوبة من خلال التابع copyResize وهنا وضعنا القيمة التجريبية 500.

يمكنك الاطلاع على المزيد من التفاصيل والأدوات من توثيق المكتبة image_picker أو حزم التعامل مع الصور ضمن لغة dart.

اهلا بك اخي الكريم شاكر لك ردك 

بنسبة الى الإجابة الأولى والثانية لا استطيع استعمال هذا المكتبة لنني استعمل المكتبة التاليه:

https://pub.dev/packages/wechat_assets_picker

اما الجواب الثالث قمت بمحاولة تطبيقه ولكن لم ينجح مع هذا المكتبة 

بتاريخ On 1/8/2022 at 16:09 قال بلال زيادة:

يمكنك استخدام حزمة flutter_image_compress يمكنك العثور عليها من هنا , تعمل هذه الحزمة على ضغط الصورة , وهناك توثيق كامل يمكنك قراءته للتعامل مع هذه المكتبة و هذه المكتبة تعمل على كلا النظامين ios / android ، ويمكنك تثبيت الحزمة في مشروعك من خلال فتح ملف pubspec.ymal من خلال الأمر التالي 


dependencies:
  flutter_image_compress: ^1.0.0-nullsafety

ويمكنك استدعاء  المكتبة في الملف الذي تعمل عليه من خلال 


import 'package:flutter_image_compress/flutter_image_compress.dart';

كذلك تزودك هذه الحزمة ببعض الخصائص للتعامل مع الصورة كخاصية الدوران ( rotate ) ، وخاصية autoCorrectionAngle و خاصية التحكم بجودة الصورة و خاصية العرض و الارتفاع الأقصى للصورة . 

اهلا بك اخي الكريم

شاكر لك ردك

قمت بمحاولة استعمال هذا الحزمة مع الحزمة التي استعملها لجلب الصور ولكن لم تنجح لدي 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...