Img

مانند Image است با این تفاوت که فقط عکس را نشان میدهد اما Image گیف هم نمایش میدهد.

 

خواص این المان :

     ↵  Src :

              لینک تصویر میباشد و تصویر از این لینک بارگیری می شود.

   ↵  Validate :

                با نوشتن id ورودی هایی که نیاز به چک شدن دارن و جدا کردن آن ها با  “ , ” تمام تکست باکس ها و دیگر ورودی ها با regex که داخل خاصیت validation در آن المان داده شده چک میشوند و در صورتی که تمام آن ها درست بودند اکشن نهایی داخل onclick اجرا میشود. این اتفاقات پس از کلیک شدن المان رخ می دهد.

     ↵  OnClick :

              در صورت کلیک شدن المان صدا میشود و مقدار آن یک اکشن می باشد.

     ↵  Align :

              موقعیت مکانی شروع المان در صفحه را مشخص میکند

     ↵  Tint :

              رنگ عکس را تغییر میدهد.

     ↵  scaletype :

              نحوه نمایش تصویر را مشخص میکند و مقادیر center برای نمایش در مرکز  center_crop برای نمایش در مرکز با بریدن اضافاتcenter_inside برای نمایش در مرکز و داخل،  fit_center برای کوچک کردن عکس به صورتی که با طول و عرض داده شده و مرکز محور مطابق شود ، fit_end برای نمایش در انتها  fit_start برای نمایش در شروع و  fit_xy برای پیروی از طول و عرض مادر و focus_crop برای برش از قسمت متمرکز را میگیرد.

     ↵  aspectRatio :

              انداره و مدل عکس را مشخص میکند. مقادیر center و center_crop و center_inside و fit_center و fit_end و fit_start و fit_xy و focus_crop را میگیرد.

 


پشتیبانی از تصاویر Base64

نسخه مورد نیاز: قابلیت‌های جدید این بخش شامل بارگذاری امن و غیرهمزمان Base64، رویدادهای onload/onerror و محدودیت‌های قابل تنظیم، از appsansdk-core 0.1.78 به بعد در دسترس هستند. فرمت‌های base64:// و data: در نسخه‌های قبلی نیز پشتیبانی می‌شدند.

خاصیت src علاوه بر لینک‌های معمولی و مسیر فایل‌های محلی، دو فرمت قبلی Base64 را نیز بدون نیاز به تغییر در کد مینی‌اپ پشتیبانی می‌کند:

<img id="photo" width="match_parent" height="300" />
Appsan.setProperty('photo', 'src', 'base64://' + imageData);
// یا
Appsan.findElementById('photo').setProperty('src', dataUrl);

سازگاری با نسخه‌های قبل: امضای API و فرمت‌های base64:// و data: تغییری نکرده‌اند و کدهای فعلی بدون مهاجرت کار می‌کنند.

نحوه بارگذاری و مدیریت حافظه

بارگذاری Base64 به‌صورت غیرهمزمان انجام می‌شود تا Thread اصلی برنامه مسدود نشود. داده به‌صورت stream در فایل موقت decode می‌شود، ابعاد تصویر قبل از ساخت Bitmap بررسی می‌شود و تصویر متناسب با اندازه View و بودجه حافظه downsample می‌شود. هنگام تغییر مجدد src، درخواست قبلی لغو خواهد شد.

در زمان بارگذاری placeholder نمایش داده می‌شود. اگر داده نامعتبر یا بزرگ‌تر از محدودیت‌های مجاز باشد، آیکن خطا نمایش داده شده، خطا در لاگ Appsan ثبت می‌شود و در صورت تعریف شدن onerror اکشن مربوطه اجرا می‌شود. این رفتار جایگزین freeze یا crash شدن برنامه است.

OnLoad

اختیاری است و پس از بارگذاری موفق تصویر اجرا می‌شود. مقدار $data شامل width و height تصویر اصلی است. برای منابع غیر Base64 ممکن است این دو مقدار صفر باشند.

OnError

اختیاری است و در صورت شکست بارگذاری اجرا می‌شود. مقدار $data شامل فیلدهای code و message است.

<img
    id="photo"
    width="match_parent"
    height="300"
    onload="script/script:imageLoaded($data)"
    onerror="script/script:imageFailed($data)"
/>

<script id="script">
function imageLoaded(data) {
    console.log('Image loaded:', data.width, data.height);
}

function imageFailed(error) {
    console.error('Image error:', error.code, error.message);
}
</script>

کدهای خطای Base64

محدودیت‌های پیش‌فرض

محدودیت مقدار پیش‌فرض
حجم متن Base64 24 MB
حجم داده decodeشده 18 MB
بودجه حافظه Bitmap 32 MB
حداکثر عرض یا ارتفاع تصویر 16384 px

اگر تصویر از این محدودیت‌ها عبور کند، بارگذاری کنترل‌شده شکست می‌خورد و onerror فراخوانی می‌شود. کوچک بودن ظاهری المان به‌تنهایی به معنی کم بودن حافظه Bitmap نیست؛ SDK تصویر را هنگام decode متناسب با اندازه المان نمونه‌برداری می‌کند.

تنظیم محدودیت‌ها در برنامه میزبان

این تنظیم اختیاری و فقط برای توسعه‌دهنده برنامه میزبان است. مینی‌اپ‌ها نیازی به تغییر ندارند.

Appsan.getInstance().setImageSourceLimits(
    new ImageSourceLimits.Builder()
        .setMaximumEncodedBytes(24L * 1024L * 1024L)
        .setMaximumDecodedDataBytes(18L * 1024L * 1024L)
        .setMaximumDecodedBitmapBytes(32L * 1024L * 1024L)
        .setMaximumDimension(16_384)
        .build()
);

Revision #6
Created 5 June 2022 17:26:11 by n.mashayekhi
Updated 11 August 2026 15:53:07 by a.dadgari