HTML5 এ ক্যানভাস প্রস্থ এবং উচ্চতা


181

এইচটিএমএল 5 canvasউপাদানের প্রস্থ এবং উচ্চতা ঠিক করা কি সম্ভব ?

স্বাভাবিক উপায় নিম্নলিখিত:

<canvas id="canvas" width="300" height="300"></canvas>

উত্তর:


379

canvasDOM উপাদান রয়েছে .heightএবং .widthকরতে বৈশিষ্ট্য যে মিলা height="…"এবং width="…"বৈশিষ্ট্যাবলী। আপনার ক্যানভাসের আকার পরিবর্তন করতে জাভাস্ক্রিপ্ট কোডে সংখ্যাসূচক মানগুলিতে সেট করুন। উদাহরণ স্বরূপ:

var canvas = document.getElementsByTagName('canvas')[0];
canvas.width  = 800;
canvas.height = 600;

নোট করুন যে এটি ক্যানভাস সাফ করে, যদিও ক্যানভাস ctx.clearRect( 0, 0, ctx.canvas.width, ctx.canvas.height);পুরোপুরি সাফ না করে এমন ব্রাউজারগুলি পরিচালনা করতে আপনার অনুসরণ করা উচিত । আকার পরিবর্তনের পরে আপনাকে যে কোনও সামগ্রী প্রদর্শিত হবে তা পুনরায় আঁকতে হবে।

আরও নোট করুন যে উচ্চতা এবং প্রস্থ হ'ল অঙ্কনের জন্য ব্যবহৃত লজিকাল ক্যানভাস মাত্রা এবং সিএসএস বৈশিষ্ট্যগুলি থেকে পৃথক । আপনি যদি সিএসএসের বৈশিষ্ট্যগুলি সেট না করেন তবে ক্যানভাসের অভ্যন্তরীণ আকারটি এর প্রদর্শনের আকার হিসাবে ব্যবহৃত হবে; আপনি যদি সিএসএস বৈশিষ্ট্যগুলি সেট করেন এবং সেগুলি ক্যানভাসের মাত্রা থেকে পৃথক হয় তবে আপনার সামগ্রী ব্রাউজারে স্কেল করা হবে। উদাহরণ স্বরূপ:style.heightstyle.width

// Make a canvas that has a blurry pixelated zoom-in
// with each canvas pixel drawn showing as roughly 2x2 on screen
canvas.width  = 400;
canvas.height = 300; 
canvas.style.width  = '800px';
canvas.style.height = '600px';

4x দ্বারা জুম করা ক্যানভাসের এই লাইভ উদাহরণটি দেখুন ।


1
@ হাযার্ট আপনি যদি এগুলি আলাদাভাবে সেট করতে চান: $('#mycanvas').attr({width:400,height:300}).css({width:'800px',height:'600px'});আপনি যদি ভিজ্যুয়াল আকারটি পিক্সেল আকারের সমান হতে চান তবে শৈলীগুলি কখনও সেট করবেন না, কেবলমাত্র বৈশিষ্ট্যগুলি।
ফোগজ

1
"আপনি যদি ভিজ্যুয়াল আকারটি পিক্সেল আকারের সমান হতে চান তবে শৈলীগুলি কখনও সেট করবেন না, কেবলমাত্র বৈশিষ্ট্যগুলি", এই পছন্দটির কোনও কারণ আছে কি? আমার যদি ক্যানভাসে অনেকগুলি অবজেক্ট থাকে এবং আমি জুমিন / জুমআউট করতে চাই তবে কেবল CSS পুনরায় সেট করা অনেক দ্রুত হবে, না? (সমস্ত বস্তুর মধ্য দিয়ে লুপের চেয়ে) ...
ইংরাজএডাম

3
@ গেমোরাইজ: সিএসএসের মাধ্যমে জুম করা এটি ঝাপসা করে তোলে। যাইহোক, আপনি প্রতিটি বস্তুর 'আকার' পরিবর্তন না করে redrawing এর মধ্যে প্রসঙ্গের স্কেলিং এবং অনুবাদ দিয়ে জুম করতে পারেন।
ফ্রোগজ

1
থেক্স অনেক প্রশংসা করেছেন। আমি এখন দেখছি যে সিএসএস কী করছে ... এটি ক্যানভাসের সাথে 'ইমেজ'র মতো আচরণ করে, একটি চিত্রকে স্কেলিং করা স্পষ্টতই এটি' পুনরায় অঙ্কন 'করার মতো ভাল নয়!
ইংলিশএডাম

3
এছাড়াও, আপনি এখন ক্যানভাসে "ইমেজ-রেন্ডারিং: পিক্সिलेটেড" স্টাইল ব্যবহার করে কমপক্ষে Chrome এ "অস্পষ্ট পিক্সिलेটেড জুম-ইন" এর পরিবর্তে "ক্লাস পিক্সেলেটেড জুম-ইন" করতে পারেন। পার্থক্যটি দেখানোর জন্য আমি আপনার ফিডল বেঁধে দিয়েছি
ডন হ্যাচ

62

একটি ক্যানভাসের 2 টি আকার রয়েছে, ক্যানভাসে পিক্সেলের মাত্রা রয়েছে (এটি ব্যাকিংস্টোর বা ড্রইংবফার) এবং প্রদর্শন আকার। পিক্সেল সংখ্যা ক্যানভাস বৈশিষ্ট্য ব্যবহার করে সেট করা হয়। এইচটিএমএলে

<canvas width="400" height="300"></canvas>

বা জাভাস্ক্রিপ্টে

someCanvasElement.width = 400;
someCanvasElement.height = 300;

এর থেকে পৃথক হ'ল ক্যানভাসের সিএসএস স্টাইলের প্রস্থ এবং উচ্চতা

সিএসএসে

canvas {  /* or some other selector */
   width: 500px;
   height: 400px;
}

বা জাভাস্ক্রিপ্টে

canvas.style.width = "500px";
canvas.style.height = "400px";

ক্যানভাস 1x1 পিক্সেল তৈরির পক্ষে যুক্তিযুক্ত সর্বোত্তম উপায় হ'ল সিএসএস ব্যবহার করার জন্য সিএসএস ব্যবহার করুন এবং তারপরে পিক্সেলের সংখ্যার সাথে সামঞ্জস্য করার জন্য একটি ছোট্ট জাভাস্ক্রিপ্ট লিখুন।

function resizeCanvasToDisplaySize(canvas) {
   // look up the size the canvas is being displayed
   const width = canvas.clientWidth;
   const height = canvas.clientHeight;

   // If it's resolution does not match change it
   if (canvas.width !== width || canvas.height !== height) {
     canvas.width = width;
     canvas.height = height;
     return true;
   }

   return false;
}

কেন এটি সেরা উপায়? কারণ এটি কোনও কোড পরিবর্তন না করে বেশিরভাগ ক্ষেত্রেই কাজ করে।

এখানে একটি পূর্ণ উইন্ডো ক্যানভাস:

এবং এখানে একটি অনুচ্ছেদে ভাসা হিসাবে ক্যানভাস's

একটি বিশাল নিয়ন্ত্রণ প্যানেলে একটি ক্যানভাস এখানে

পটভূমি হিসাবে এখানে একটি ক্যানভাস

কারণ আমি বৈশিষ্ট্যগুলি সেট করি নি যা প্রতিটি নমুনায় পরিবর্তিত হয় কেবল সিএসএস (যতক্ষণ না ক্যানভাস সম্পর্কিত)

মন্তব্য:

  • ক্যানভাস উপাদানটিতে সীমানা বা প্যাডিং রাখবেন না। উপাদানটির মাত্রা সংখ্যা থেকে বিয়োগ করতে আকারের গণনা করা সমস্যাজনক

সেরা উত্তর, এই স্নিপেটটি একটি স্ট্যান্ডার্ড ডিওএম ক্যানভাস পদ্ধতি হওয়া উচিত।
rustypaper

23

আপনাকে অনেক ধন্যবাদ! অবশেষে আমি এই কোড দিয়ে অস্পষ্ট পিক্সেল সমস্যাটি সমাধান করেছি:

<canvas id="graph" width=326 height=240 style='width:326px;height:240px'></canvas>

'হাফ-পিক্সেল' যুক্ত করার সাথে সাথে লাইনগুলি আনব্লু করার কৌশলটি ঘটায়।


26
@UpTheCreek আপনি যদি ক্যানভাসে একটি লাইন আঁকেন, এটি টিকার দেখায় তবে এটি হওয়া উচিত, যেন এটি ঝাপসা। অর্ধ পিক্সেলগুলিতে রেখাগুলি স্থাপন করে (বলুন, 50 এর পরিবর্তে 50.5) আপনি একটি সুন্দর, পরিষ্কার লাইন পাবেন। এটি প্রায়শই আপনার কোডের একেবারে শুরুতে ctx.translate (0.5, 0.5) ব্যবহার করে করা হয় যাতে আপনি এটির পরে ভুলে যেতে পারেন
জোহান

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