এইচটিএমএল 5 আপলোড করার পূর্বে প্রাক-আকার পরিবর্তন করুন


181

এখানে একটি নুডল স্ক্র্যাচার।

মনে রাখবেন আমাদের এইচটিএমএল 5 স্থানীয় স্টোরেজ এবং এক্সএইচআর ভি 2 রয়েছে এবং কী নেই। আমি ভাবছিলাম যে কেউ কোনও কাজের উদাহরণ খুঁজে পেতে পারে বা এই প্রশ্নের জন্য আমাকে কেবল একটি হ্যাঁ বা না দেয়:

নতুন স্থানীয় স্টোরেজ (বা যাই হোক না কেন) ব্যবহার করে কোনও চিত্রের প্রাক-আকার তৈরি করা সম্ভব, যাতে কোনও ব্যবহারকারী যাঁর একটি চিত্র পুনরায় আকার দেওয়ার বিষয়ে কোনও ইঙ্গিত নেই, তারা আমার ওয়েবসাইটে 10 এমবি চিত্রটি টেনে আনতে পারেন, এটি নতুন স্থানীয় স্টোরেজ ব্যবহার করে পুনরায় আকার দিতে এবং তারপরে এটি ছোট আকারে আপলোড করুন।

আমি পুরোপুরি জানি আপনি এটি ফ্ল্যাশ, জাভা অ্যাপলেটগুলি, সক্রিয় এক্স দিয়ে করতে পারেন ... প্রশ্ন আপনি যদি জাভাস্ক্রিপ্ট + এইচটিএমএল 5 দিয়ে করতে পারেন তবে।

এই এক প্রতিক্রিয়া অপেক্ষায়।

আপাতত তা।

উত্তর:


181

হ্যাঁ, ফাইল এপিআই ব্যবহার করুন , তারপরে আপনি ক্যানভাস উপাদান দিয়ে চিত্রগুলি প্রক্রিয়া করতে পারেন ।

এই মোজিলা হ্যাকস ব্লগ পোস্টটি আপনাকে বেশিরভাগ প্রক্রিয়ার মধ্য দিয়ে যায়। রেফারেন্সের জন্য এখানে ব্লগ পোস্ট থেকে একত্রিত উত্স কোড:

// from an input element
var filesToUpload = input.files;
var file = filesToUpload[0];

var img = document.createElement("img");
var reader = new FileReader();  
reader.onload = function(e) {img.src = e.target.result}
reader.readAsDataURL(file);

var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);

var MAX_WIDTH = 800;
var MAX_HEIGHT = 600;
var width = img.width;
var height = img.height;

if (width > height) {
  if (width > MAX_WIDTH) {
    height *= MAX_WIDTH / width;
    width = MAX_WIDTH;
  }
} else {
  if (height > MAX_HEIGHT) {
    width *= MAX_HEIGHT / height;
    height = MAX_HEIGHT;
  }
}
canvas.width = width;
canvas.height = height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, width, height);

var dataurl = canvas.toDataURL("image/png");

//Post dataurl to the server with AJAX

6
কেন ধন্যবাদ আপনাকে ধন্যবাদ স্যার। আমার আজ রাতে একটি নাটক হবে ... ফাইলটি এপিআই সহ। আমি কাজের জন্য ড্রাগ এবং ড্রপ আপলোড পেয়েছি এবং আমি বুঝতে পেরেছি এটি অন্তর্ভুক্ত করার জন্য এটি সত্যিই একটি দুর্দান্ত বৈশিষ্ট্যও হবে। হুরেই।
জিমিটি 1988

3
ফাইলের আকার হ্রাস করার জন্য মানটি আনা হয়েছে কিনা তা নিশ্চিত করার জন্য আমাদের এই মেকানবাস.টোডাটা ইউআরএল ("চিত্র / জেপেইগ", 0.5) ব্যবহার করার দরকার নেই। আমি মজিলা ব্লগ পোস্টে এই মন্তব্যটি জুড়ে এসেছিল ও বাগ রেজল্যুশন এখানে দেখেছি bugzilla.mozilla.org/show_bug.cgi?id=564388
sbose

33
onloadআপনার ইমেজটির জন্য অপেক্ষা করতে হবে ( সেটিংসের আগে হ্যান্ডলার সংযুক্ত করুন src), কারণ ব্রাউজারটিকে অ্যাসিঙ্ক্রোনালি ডিকোডিং করার অনুমতি দেওয়া হয় এবং পিক্সেলগুলি আগে উপলব্ধ নাও হতে পারে drawImage
কর্নেল

6
আপনি ফাইলরেডারটির ওনলোড ফাংশনে ক্যানভাস কোডটি রাখতে চাইতে পারেন - এমন সম্ভাবনা রয়েছে যে ctx.drawImage()শেষের দিকে আপনার আগে বড় চিত্রগুলি লোড হবে না ।
গ্রেগ

4
সাবধান থাকো, আপনি additionnal যাদু করতে হবে এটি iOS উপর কাজ: stackoverflow.com/questions/11929099/...
flo850

107

আমি কয়েক বছর আগে এই সমস্যাটি মোকাবিলা করেছি এবং গিথুবটিতে আমার সমাধানটি https://github.com/rossturner/HTML5- আইমেজ আপলোডার হিসাবে আপলোড করেছি

রবার্টকের উত্তরটি মজিলা হ্যাকস ব্লগ পোস্টে প্রস্তাবিত সমাধানটি ব্যবহার করে , তবে আমি দেখতে পেলাম যে এটি 2: 1 নয় (বা এর একাধিক) স্কেলের আকার পরিবর্তন করার সময় এটি সত্যই দুর্বল চিত্রের মান দিয়েছে। আমি বিভিন্ন চিত্রের আকার পরিবর্তনকারী অ্যালগরিদমগুলির সাথে পরীক্ষা শুরু করেছিলাম, যদিও বেশিরভাগ শেষ ধীর হয়ে গেছে অন্যথায় মানের দিক থেকেও দুর্দান্ত ছিল না।

অবশেষে আমি এমন একটি সমাধান নিয়ে এসেছি যা আমি বিশ্বাস করি যে দ্রুত সম্পাদন করে এবং এতে খুব ভাল পারফরম্যান্সও রয়েছে - এক্স টার্গেটের ভিত্তিতে 2: 1 অনুপাতের ভিত্তিতে 1 ক্যানভাস থেকে অন্য কাজ করে অনুলিপি করার জন্য মজিলা সমাধানটি দ্রুত কাজ করে এবং চিত্রের মানের ক্ষতি না করে কাজ করে works পিক্সেল প্রশস্ত এবং y পিক্সেল লম্বা, আমি এই ক্যানভাস আকার পরিবর্তন পদ্ধতিটি ব্যবহার করি যতক্ষণ না ছবিটি x এবং 2 x এবং y এবং 2 y এর মধ্যে হয় । এই মুহুর্তে আমি পরে লক্ষ্য আকারে নীচে পরিবর্তন করার চূড়ান্ত "পদক্ষেপ" এর জন্য অ্যালগরিদমিক চিত্রের আকার পরিবর্তন করি। বেশ কয়েকটি বিভিন্ন অ্যালগরিদম চেষ্টা করার পরে আমি একটি ব্লগ থেকে নেওয়া বিলিনিয়ার দ্বিখণ্ডনে স্থির হয়েছি যা আর অনলাইন নয় তবে ইন্টারনেট সংরক্ষণাগার মাধ্যমে অ্যাক্সেসযোগ্য, যা ভাল ফলাফল দেয়, এখানে প্রযোজ্য কোডটি দেওয়া হয়েছে:

ImageUploader.prototype.scaleImage = function(img, completionCallback) {
    var canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    canvas.getContext('2d').drawImage(img, 0, 0, canvas.width, canvas.height);

    while (canvas.width >= (2 * this.config.maxWidth)) {
        canvas = this.getHalfScaleCanvas(canvas);
    }

    if (canvas.width > this.config.maxWidth) {
        canvas = this.scaleCanvasWithAlgorithm(canvas);
    }

    var imageData = canvas.toDataURL('image/jpeg', this.config.quality);
    this.performUpload(imageData, completionCallback);
};

ImageUploader.prototype.scaleCanvasWithAlgorithm = function(canvas) {
    var scaledCanvas = document.createElement('canvas');

    var scale = this.config.maxWidth / canvas.width;

    scaledCanvas.width = canvas.width * scale;
    scaledCanvas.height = canvas.height * scale;

    var srcImgData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);
    var destImgData = scaledCanvas.getContext('2d').createImageData(scaledCanvas.width, scaledCanvas.height);

    this.applyBilinearInterpolation(srcImgData, destImgData, scale);

    scaledCanvas.getContext('2d').putImageData(destImgData, 0, 0);

    return scaledCanvas;
};

ImageUploader.prototype.getHalfScaleCanvas = function(canvas) {
    var halfCanvas = document.createElement('canvas');
    halfCanvas.width = canvas.width / 2;
    halfCanvas.height = canvas.height / 2;

    halfCanvas.getContext('2d').drawImage(canvas, 0, 0, halfCanvas.width, halfCanvas.height);

    return halfCanvas;
};

ImageUploader.prototype.applyBilinearInterpolation = function(srcCanvasData, destCanvasData, scale) {
    function inner(f00, f10, f01, f11, x, y) {
        var un_x = 1.0 - x;
        var un_y = 1.0 - y;
        return (f00 * un_x * un_y + f10 * x * un_y + f01 * un_x * y + f11 * x * y);
    }
    var i, j;
    var iyv, iy0, iy1, ixv, ix0, ix1;
    var idxD, idxS00, idxS10, idxS01, idxS11;
    var dx, dy;
    var r, g, b, a;
    for (i = 0; i < destCanvasData.height; ++i) {
        iyv = i / scale;
        iy0 = Math.floor(iyv);
        // Math.ceil can go over bounds
        iy1 = (Math.ceil(iyv) > (srcCanvasData.height - 1) ? (srcCanvasData.height - 1) : Math.ceil(iyv));
        for (j = 0; j < destCanvasData.width; ++j) {
            ixv = j / scale;
            ix0 = Math.floor(ixv);
            // Math.ceil can go over bounds
            ix1 = (Math.ceil(ixv) > (srcCanvasData.width - 1) ? (srcCanvasData.width - 1) : Math.ceil(ixv));
            idxD = (j + destCanvasData.width * i) * 4;
            // matrix to vector indices
            idxS00 = (ix0 + srcCanvasData.width * iy0) * 4;
            idxS10 = (ix1 + srcCanvasData.width * iy0) * 4;
            idxS01 = (ix0 + srcCanvasData.width * iy1) * 4;
            idxS11 = (ix1 + srcCanvasData.width * iy1) * 4;
            // overall coordinates to unit square
            dx = ixv - ix0;
            dy = iyv - iy0;
            // I let the r, g, b, a on purpose for debugging
            r = inner(srcCanvasData.data[idxS00], srcCanvasData.data[idxS10], srcCanvasData.data[idxS01], srcCanvasData.data[idxS11], dx, dy);
            destCanvasData.data[idxD] = r;

            g = inner(srcCanvasData.data[idxS00 + 1], srcCanvasData.data[idxS10 + 1], srcCanvasData.data[idxS01 + 1], srcCanvasData.data[idxS11 + 1], dx, dy);
            destCanvasData.data[idxD + 1] = g;

            b = inner(srcCanvasData.data[idxS00 + 2], srcCanvasData.data[idxS10 + 2], srcCanvasData.data[idxS01 + 2], srcCanvasData.data[idxS11 + 2], dx, dy);
            destCanvasData.data[idxD + 2] = b;

            a = inner(srcCanvasData.data[idxS00 + 3], srcCanvasData.data[idxS10 + 3], srcCanvasData.data[idxS01 + 3], srcCanvasData.data[idxS11 + 3], dx, dy);
            destCanvasData.data[idxD + 3] = a;
        }
    }
};

এটি config.maxWidthআসল দিক অনুপাতটি বজায় রেখে একটি চিত্রকে প্রশস্ত আকারে স্কেল করে । উন্নয়নের সময় এটি আইপ্যাড / আইফোন সাফারিতে প্রধান ডেস্কটপ ব্রাউজারগুলি (আই 9 +, ফায়ারফক্স, ক্রোম) ছাড়াও কাজ করেছিল তাই আমি আশা করি এটি আজও এইচটিএমএল 5 এর বিস্তৃত গ্রহণের কারণে সামঞ্জস্যপূর্ণ হবে। নোট করুন যে ক্যানভাস.টো.ডাটাআরএল () কলটি মাইম টাইপ এবং চিত্রের গুণমান নিয়েছে যা আপনাকে গুণমান এবং আউটপুট ফাইল ফর্ম্যাটটিকে নিয়ন্ত্রণ করতে দেয় (আপনি যদি চান তবে ইনপুট থেকে আলাদা)।

এটি কেবলমাত্র বিন্দুতে আবশ্যক নয় ওরিয়েন্টেশন সম্পর্কিত তথ্য বজায় রাখে, এই মেটাডাটা সম্পর্কে জ্ঞান ছাড়াই চিত্রটিকে পুনরায় আকার দেওয়া হয় এবং সে হিসাবে সংরক্ষণ করা হয়, ওরিয়েন্টেশনের জন্য চিত্রের মধ্যে কোনও মেটাডেটা হারাতে হবে যার অর্থ ট্যাবলেট ডিভাইসে নেওয়া চিত্রগুলি "উল্টোদিকে" ছিল এগুলি হিসাবে উপস্থাপন করা হয়েছে, যদিও সেগুলি ডিভাইসের ক্যামেরা ভিউফাইন্ডারে উল্টানো হত। যদি এটি উদ্বেগজনক হয় তবে এই ব্লগ পোস্টটিতে কীভাবে এটি সম্পাদন করতে হবে তার একটি ভাল গাইড এবং কোড উদাহরণ রয়েছে, যা আমি নিশ্চিত যে উপরের কোডটিতে একীভূত হতে পারে।


4
আমি আপনাকে উত্তম কারণে পুরষ্কার দিয়েছি কারণ আমার মনে হচ্ছে এটি উত্তরে একগুচ্ছ যোগ করে, সেই
স্যাম স্যাফারন

3
একটি অতি সহায়ক আত্মা এখন ওরিয়েন্টেশন মেটাডেটার জন্য কিছু কার্যকারিতায় মার্জ হয়েছে :)
রস টেলর-টার্নার

26

উপরের সংশোধন:

<img src="" id="image">
<input id="input" type="file" onchange="handleFiles()">
<script>

function handleFiles()
{
    var filesToUpload = document.getElementById('input').files;
    var file = filesToUpload[0];

    // Create an image
    var img = document.createElement("img");
    // Create a file reader
    var reader = new FileReader();
    // Set the image once loaded into file reader
    reader.onload = function(e)
    {
        img.src = e.target.result;

        var canvas = document.createElement("canvas");
        //var canvas = $("<canvas>", {"id":"testing"})[0];
        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0);

        var MAX_WIDTH = 400;
        var MAX_HEIGHT = 300;
        var width = img.width;
        var height = img.height;

        if (width > height) {
          if (width > MAX_WIDTH) {
            height *= MAX_WIDTH / width;
            width = MAX_WIDTH;
          }
        } else {
          if (height > MAX_HEIGHT) {
            width *= MAX_HEIGHT / height;
            height = MAX_HEIGHT;
          }
        }
        canvas.width = width;
        canvas.height = height;
        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0, width, height);

        var dataurl = canvas.toDataURL("image/png");
        document.getElementById('image').src = dataurl;     
    }
    // Load files into file reader
    reader.readAsDataURL(file);


    // Post the data
    /*
    var fd = new FormData();
    fd.append("name", "some_filename.jpg");
    fd.append("image", dataurl);
    fd.append("info", "lah_de_dah");
    */
}</script>

2
আপনি ফর্মডাটা () এ যুক্ত করার পরে আপনি এর পিএইচপি অংশটি কীভাবে পরিচালনা করবেন? আপনি উদাহরণস্বরূপ $ _FILES ['নাম'] ['tmp_name'] [$ i] খুঁজছেন না? আমি চেষ্টা করছি যদি (আইসেট ($ _ পোস্ট ['চিত্র'])) ... তবে dataurlসেখানে নেই।
denikov

2
প্রথমবার আপনি কোনও ছবি আপলোড করার চেষ্টা করলে এটি ফায়ারফক্সে কাজ করে না। পরের বার আপনি চেষ্টা করুন এটি কার্যকর। কিভাবে ঠিক হবে এটা?
ফ্রেড

ফাইল অ্যারে নাল বা ফাঁকা থাকলে ফিরে আসুন।
শীলপ্রিয়

2
Chrome এ অ্যাক্সেস করার চেষ্টা করার সময় img.widthএবং img.heightপ্রাথমিকভাবে তারা হয় 0। আপনার বাকি ফাংশনটি ভিতরে রাখতে হবেimg.addEventListener('load', function () { // now the image has loaded, continue... });
ইনিগো

2
@ জাস্টিন আপনি কি "উপরে" স্পষ্ট করে বলতে পারেন, এই পোস্টটির সংশোধন কী? চিয়ার্স
মার্টিন

16

জাস্টিনের উত্তরটিতে পরিবর্তন যা আমার পক্ষে কাজ করে:

  1. যোগ করা হয়েছে img.onload
  2. একটি বাস্তব উদাহরণ সহ পোষ্ট অনুরোধ প্রসারিত করুন

function handleFiles()
{
    var dataurl = null;
    var filesToUpload = document.getElementById('photo').files;
    var file = filesToUpload[0];

    // Create an image
    var img = document.createElement("img");
    // Create a file reader
    var reader = new FileReader();
    // Set the image once loaded into file reader
    reader.onload = function(e)
    {
        img.src = e.target.result;

        img.onload = function () {
            var canvas = document.createElement("canvas");
            var ctx = canvas.getContext("2d");
            ctx.drawImage(img, 0, 0);

            var MAX_WIDTH = 800;
            var MAX_HEIGHT = 600;
            var width = img.width;
            var height = img.height;

            if (width > height) {
              if (width > MAX_WIDTH) {
                height *= MAX_WIDTH / width;
                width = MAX_WIDTH;
              }
            } else {
              if (height > MAX_HEIGHT) {
                width *= MAX_HEIGHT / height;
                height = MAX_HEIGHT;
              }
            }
            canvas.width = width;
            canvas.height = height;
            var ctx = canvas.getContext("2d");
            ctx.drawImage(img, 0, 0, width, height);

            dataurl = canvas.toDataURL("image/jpeg");

            // Post the data
            var fd = new FormData();
            fd.append("name", "some_filename.jpg");
            fd.append("image", dataurl);
            fd.append("info", "lah_de_dah");
            $.ajax({
                url: '/ajax_photo',
                data: fd,
                cache: false,
                contentType: false,
                processData: false,
                type: 'POST',
                success: function(data){
                    $('#form_photo')[0].reset();
                    location.reload();
                }
            });
        } // img.onload
    }
    // Load files into file reader
    reader.readAsDataURL(file);
}

2
ওরিয়েন্টেশনের তথ্য (এক্সিফ) হারিয়ে যায়
কনস্টান্টিন বাহারুশেভ

8

আপনি যদি চাকাটি পুনর্বিবেচনা করতে না চান তবে আপনি plupload.com চেষ্টা করতে পারেন


3
আমি ক্লায়েন্ট সাইড পুনরায় আকার দেওয়ার জন্য প্লুপলোড ব্যবহার করি। এটি সম্পর্কে সবচেয়ে ভাল বিষয়টি হ'ল এটি ফ্ল্যাশ, এইচটিএমএল 5, সিলভারলাইট ইত্যাদি ব্যবহার করতে পারে যা ব্যবহারকারীর কাছে যা কিছু রয়েছে, কারণ প্রতিটি ব্যবহারকারীর আলাদা আলাদা সেটআপ রয়েছে। আপনি যদি কেবল এইচটিএমএল 5 চান তবে আমি মনে করি এটি কিছু পুরানো ব্রাউজার এবং অপেরাতে কাজ করবে না।
jnl

6

টাইপরাইটারে মুদ্রি

async resizeImg(file: Blob): Promise<Blob> {
    let img = document.createElement("img");
    img.src = await new Promise<any>(resolve => {
        let reader = new FileReader();
        reader.onload = (e: any) => resolve(e.target.result);
        reader.readAsDataURL(file);
    });
    await new Promise(resolve => img.onload = resolve)
    let canvas = document.createElement("canvas");
    let ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);
    let MAX_WIDTH = 1000;
    let MAX_HEIGHT = 1000;
    let width = img.naturalWidth;
    let height = img.naturalHeight;
    if (width > height) {
        if (width > MAX_WIDTH) {
            height *= MAX_WIDTH / width;
            width = MAX_WIDTH;
        }
    } else {
        if (height > MAX_HEIGHT) {
            width *= MAX_HEIGHT / height;
            height = MAX_HEIGHT;
        }
    }
    canvas.width = width;
    canvas.height = height;
    ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0, width, height);
    let result = await new Promise<Blob>(resolve => { canvas.toBlob(resolve, 'image/jpeg', 0.95); });
    return result;
}

1
এই পোস্ট জুড়ে যে কেউ আসতে পারে, এই প্রতিশ্রুতি ভিত্তিক উত্তর আমার মতে অনেক বেশি নির্ভরযোগ্য। আমি সাধারণ জেএসে রূপান্তর করেছি এবং এটি একটি কবজির মতো কাজ করে।
gbland777

5
fd.append("image", dataurl);

এটি কাজ করবে না। পিএইচপি সাইডে আপনি এটি দিয়ে ফাইল সংরক্ষণ করতে পারবেন না।

পরিবর্তে এই কোডটি ব্যবহার করুন:

var blobBin = atob(dataurl.split(',')[1]);
var array = [];
for(var i = 0; i < blobBin.length; i++) {
  array.push(blobBin.charCodeAt(i));
}
var file = new Blob([new Uint8Array(array)], {type: 'image/png', name: "avatar.png"});

fd.append("image", file); // blob file

5

ক্যানভাস উপাদানগুলিতে চিত্রগুলি পুনরায় আকার দেওয়া সাধারণভাবে খারাপ ধারণা কারণ এটি সস্তার বাক্সের অন্তরঙ্গ ব্যবহার করে। ফলস্বরূপ চিত্রটি গুণমানের অবনতি ঘটায়। আমি http://nodeca.github.io/pica/demo/ ব্যবহার করার পরামর্শ দেব যা এর পরিবর্তে ল্যাঙ্কসোস রূপান্তর সম্পাদন করতে পারে। উপরের ডেমো পৃষ্ঠাটি ক্যানভাস এবং ল্যাঙ্কসোসের পদ্ধতির মধ্যে পার্থক্য দেখায়।

এটি সমান্তরালভাবে চিত্রগুলি পুনরায় আকার দেওয়ার জন্য ওয়েব কর্মীদের ব্যবহার করে। এখানে ওয়েবেজিএল বাস্তবায়নও রয়েছে।

কিছু অনলাইন ইমেজ রিসাইজার রয়েছে যা https://myimageresizer.com এর মতো কাজ করার জন্য পিকা ব্যবহার করে


5

গৃহীত উত্তরটি দুর্দান্ত কাজ করে তবে আকার পরিবর্তিত যুক্তি সেই ক্ষেত্রে উপেক্ষা করে যেখানে চিত্রটি কেবলমাত্র একটি অক্ষের মধ্যে সর্বাধিকের চেয়ে বড় (উদাহরণস্বরূপ, উচ্চতা> সর্বাধিক উচ্চতা তবে প্রস্থ <= ম্যাক্সথ প্রস্থ)।

আমি মনে করি যে নিম্নলিখিত কোডটি সমস্ত ক্ষেত্রেকে আরও সোজা-এগিয়ে এবং কার্যকরী উপায়ে দেখায় (প্লেইন জাভাস্ক্রিপ্ট ব্যবহার করে টাইপ স্ক্রিপ্ট ধরণের টীকাগুলি উপেক্ষা করুন):

private scaleDownSize(width: number, height: number, maxWidth: number, maxHeight: number): {width: number, height: number} {
    if (width <= maxWidth && height <= maxHeight)
      return { width, height };
    else if (width / maxWidth > height / maxHeight)
      return { width: maxWidth, height: height * maxWidth / width};
    else
      return { width: width * maxHeight / height, height: maxHeight };
  }

0

আপনি যদি আপলোড ফাংশনগুলির আগে আকার পরিবর্তন করে সাধারণ এবং সহজ আপলোড পরিচালক ব্যবহার করতে চান তবে আপনি ড্রপজোন.জেএস ব্যবহার করতে পারেন ।

এটির পুনরায় আকার ফাংশনগুলি অন্তর্নির্মিত রয়েছে তবে আপনি চাইলে আপনার নিজের সরবরাহ করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.