ব্যাকগ্রাউন্ড-চিত্রটি বেস 64 এনকোডযুক্ত চিত্র হিসাবে সেট করার কোনও উপায় আছে কি?


91

আমি জেএসে গতিশীল পটভূমি পরিবর্তন করতে চাই এবং আমার চিত্রগুলির সেটটি বেস 64 এ এনকোডে রয়েছে। আমি চেষ্টা করি:

document.getElementById("bg_image").style.backgroundImage = 
   "url('http://amigo.com/300107-2853.jpg')"; 

নিখুঁত ফলাফল সহ,

তবুও আমি এর সাথে একই করতে ব্যর্থ:

document.getElementById("bg_image").style.backgroundImage = 
   "url('data:image/png;base64,iVBORw0KGgoAAAAAAAAyCAYAAAAUYybjAAAgAElE...')";

না

document.getElementById("bg_image").style.backgroundImage = 
   "data:image/png;base64,iVBORw0KGgoAAAAAAAAyCAYAAAAUYybjAAAgAElE...";

এটা করতে কোন উপায় আছে কি?


url('কাজ করা উচিত, আমার সমস্যাটি ছিল যে অ্যাকশনস্ক্রিপ্ট ডেটা ইউআরএলটিতে আসলে নতুন লাইন ছিল, এবং আমাকে করতে হয়েছিলreplace(/\n/g, '')
নিউমিউজিক

উত্তর:


97

আমি আপনার মতোই চেষ্টা করার চেষ্টা করেছি, তবে দৃশ্যত পটভূমি চিত্র এনকোডড ডেটার সাথে কাজ করে না। বিকল্প হিসাবে, আমি সিএসএস ক্লাস এবং সেই ক্লাসগুলির মধ্যে পরিবর্তনগুলি ব্যবহার করার পরামর্শ দিই।

যদি আপনি "ফ্লাইতে" ডেটা তৈরি করে থাকেন তবে আপনি সিএসএস ফাইলগুলি গতিশীলভাবে লোড করতে পারেন।

সিএসএস:

.backgroundA {
    background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDUxRjY0ODgyQTkxMTFFMjk0RkU5NjI5MEVDQTI2QzUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDUxRjY0ODkyQTkxMTFFMjk0RkU5NjI5MEVDQTI2QzUiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpENTFGNjQ4NjJBOTExMUUyOTRGRTk2MjkwRUNBMjZDNSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpENTFGNjQ4NzJBOTExMUUyOTRGRTk2MjkwRUNBMjZDNSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuT868wAAABESURBVHja7M4xEQAwDAOxuPw5uwi6ZeigB/CntJ2lkmytznwZFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYW1qsrwABYuwNkimqm3gAAAABJRU5ErkJggg==");
}

.backgroundB {
    background-image:url("data:image/gif;base64,R0lGODlhUAAPAKIAAAsLav///88PD9WqsYmApmZmZtZfYmdakyH5BAQUAP8ALAAAAABQAA8AAAPbWLrc/jDKSVe4OOvNu/9gqARDSRBHegyGMahqO4R0bQcjIQ8E4BMCQc930JluyGRmdAAcdiigMLVrApTYWy5FKM1IQe+Mp+L4rphz+qIOBAUYeCY4p2tGrJZeH9y79mZsawFoaIRxF3JyiYxuHiMGb5KTkpFvZj4ZbYeCiXaOiKBwnxh4fnt9e3ktgZyHhrChinONs3cFAShFF2JhvCZlG5uchYNun5eedRxMAF15XEFRXgZWWdciuM8GCmdSQ84lLQfY5R14wDB5Lyon4ubwS7jx9NcV9/j5+g4JADs=");
}

এইচটিএমএল:

<div id="test" height="20px" class="backgroundA"> 
  div test 1
</div>
<div id="test2" name="test2" height="20px" class="backgroundB">
  div test2
</div>
<input type="button" id="btn" />

জাভাস্ক্রিপ্ট:

function change() {
    if (document.getElementById("test").className =="backgroundA") {
        document.getElementById("test").className="backgroundB";
        document.getElementById("test2").className="backgroundA";
    } else {
        document.getElementById("test").className="backgroundA";
        document.getElementById("test2").className="backgroundB";
    }
}

btn.onclick= change;

আমি এটি এখানে ঝাঁকিয়েছি, বোতাম টিপুন এবং এটি ডিভসের ব্যাকগ্রাউন্ড পরিবর্তন করবে: http://jsfiddle.net/egorbatik/fFQC6/


আপনাকে ধন্যবাদ, তবুও আমি প্রচুর পরিমাণে উপাদান নিয়ে কাজ করি, তাই ক্লাস বিনিময় করা ব্যবহারিক নয়।
ইগোর সাবিনকিন

4
@ ইগরস্যাভিনকিন এবং ভবিষ্যতে যাঁরা এটি পড়েন। আপনি যদি একই পটভূমিতে একই সাথে প্রচুর উপাদান পরিবর্তন করে থাকেন তবে আপনি প্রতিস্থাপন করতে চান এমন প্রতিটি উপাদানটির বিরুদ্ধে একটি শ্রেণি রেখে, তবে একটি সাধারণ পূর্বপুরুষের উপাদানটির শ্রেণি পরিবর্তন করে আপনি রেন্ডারিংকে ক্যাসকেড করতে CSS ব্যবহার করতে পারেন। উদাহরণস্বরূপ, সিএসএস হবে #ancestor.backgroundA .Change{background-image:...}এবং সাধারণ পূর্বপুরুষের আইডি #ancestor.backgroundB .Change{background-image...}কোথায় এবং সেই ব্যাকগ্রাউন্ডের কোনওটি প্রয়োগ করতে এমন সমস্ত উপাদানগুলিতে শ্রেণি প্রয়োগ করা হয়। #ancestor.Change
পতঞ্জলি

মিলিয়ন ক্লাস সহ একটি সিএসএস তৈরি করা ভাল অভ্যাস কিনা ... এমনকি আরও ভাল: মিলিয়ন বেস 64৪ টি এনকোডযুক্ত চিত্রযুক্ত সিএসএস (টিপ: কেবল চিন্তা করুন মিলিয়ন সম্ভবত এইচডি, এর সাথে ইমেজ সহ একটি ফোল্ডার)। তবে হ্যাঁ, এটি কয়েকটি চিত্রের জন্য কাজ করে।
গ্যাব্রিয়েল গার্সিয়া

এছাড়াও, আপনি আপনার সিস্টেমে উপলব্ধ চিত্রগুলিতে নতুন চিত্র যুক্ত করার সমস্যাটি কীভাবে সমাধান করবেন? এই পদ্ধতির এমনকি আকার পরিবর্তনযোগ্য?
গ্যাব্রিয়েল গার্সিয়া

35

বেস 64 নিয়ে একই সমস্যা ছিল। ভবিষ্যতে যে কেউ একই সমস্যা নিয়ে:

url = "data:image/png;base64,iVBORw0KGgoAAAAAAAAyCAYAAAAUYybjAAAgAElE...";

এটি কনসোল থেকে কার্যকর হবে, তবে কোনও স্ক্রিপ্টের মধ্যে থেকে নয়:

$img.css("background-image", "url('" + url + "')");

তবে এটির সাথে কিছুটা খেলার পরে আমি এটি নিয়ে এসেছি:

var img = new Image();
img.src = url;
$img.css("background-image", "url('" + img.src + "')");

এটি কোনও প্রক্সি চিত্রের সাথে কেন কাজ করে তা ধারণা নেই তবে এটি করে। ফায়ারফক্স ডেভ 37 এবং ক্রোম 40 এ পরীক্ষিত।

আশা করি এটি কাউকে সাহায্য করবে।

সম্পাদনা

আরও কিছুটা তদন্ত করলাম। এটি প্রদর্শিত হয় যে কখনও কখনও বেস 64 এনকোডিং (কমপক্ষে আমার ক্ষেত্রে) এনকোডযুক্ত মানটিতে উপস্থিত লাইন ব্রেকগুলির কারণে সিএসএসের সাথে ব্রেক হয় (আমার ক্ষেত্রে মানটি অ্যাকশনস্ক্রিপ্ট দ্বারা গতিশীলভাবে উত্পন্ন হয়েছিল)।

কেবল যেমন:

$img.css("background-image", "url('" + url.replace(/(\r\n|\n|\r)/gm, "") + "')");

এমনকি খুব কার্যকর হয় এবং এমনকি প্রক্সি চিত্র ব্যবহারের চেয়ে কয়েক এমএস করে দ্রুত বলে মনে হয়।


4
লাইন ব্রেকগুলি সরানো আমার জন্য এটি স্থির করে।
ইভান

ভাল তদন্ত।
সালভ টর্নেই

31

এটি চেষ্টা করুন, আমি সাফল্যের প্রতিক্রিয়া পেয়েছি ..এর কাজ করে

$("#divId").css("background-image", "url('data:image/png;base64," + base64String + "')");

মনে data:image/png;base64হয় দীর্ঘ যদি হয় এবং স্ট্রিংটি jquery ভেরিয়েবল হিসাবে সংজ্ঞায়িত হয়, তবে কাজ করে না। তবে স্ট্রিং পিএইচক্লাউসের উদাহরণ হিসাবে পিএইচপি ভেরিয়েবল হিসাবে সংজ্ঞায়িত হলে কাজ করে .... আমি যা পরীক্ষা করেছি সে সম্পর্কে কেবল তথ্য
অ্যান্ডিস

13

গ্যাব্রিয়েল গার্সিয়ার নিম্নলিখিত সমাধানগুলিতে এই কৌশলটি যুক্ত করা -

var img = 'data:image/png;base64, ...'; //place ur base64 encoded img here
document.body.style.backgroundImage = 'url(' + img + ')';

তবে, আমার ক্ষেত্রে এটি কাজ করে না। ইউআরএল ভেরিয়েবলের মধ্যে ইউআরএল সরানো কৌতুকটি করেছিল। চূড়ান্ত কোডটি এর মতো দেখায়

var img = "url('data:image/png;base64, "+base64Data + "')";
document.body.style.backgroundImage = img; 

4
@ আমিত কুমার রাই আপনি ঠিক বলেছেন আমি আমার কোডে একক উদ্ধৃতি অনুপস্থিত ছিল, যা আপনি আসলে লিখেছিলেন যাতে আপনার কোড কাজ করে।
গ্যাব্রিয়েল গার্সিয়া

8

আমি এটি চেষ্টা করেছি (এবং আমার জন্য কাজ করেছেন):

var img = 'data:image/png;base64, ...'; //place ur base64 encoded img here
document.body.style.backgroundImage = 'url(\'' + img + '\')';

ES6 সিনট্যাক্স:

let img = 'data:image/png;base64, ...'
document.body.style.backgroundImage = `url('${img}')`

একটু ভাল:

let setBackground = src => {
    this.style.backgroundImage = `url('${src}')`
};

let node = nodeIGotFromDOM, img = imageBase64EncodedFromMyGF;
setBackground.call(node, img);

4
মজার, কারণ এটি হ'ল কোড যা লোকে বলেছে তা কার্যকর হয় না।
পিম্প ট্রাইজকিট

এটি আমার পক্ষেও কাজ করে। মাইক্রোসফ্ট এজ এবং আইই 11
তেও

2

আমি সাধারণত যা করি তা হ'ল প্রথমে সম্পূর্ণ স্ট্রিংটিকে ভেরিয়েবলের মধ্যে সংরক্ষণ করা:

<?php
$img_id = 'data:image/png;base64,iVBORw0KGgoAAAAAAAAyCAY...';
?>

তারপরে, যেখানে আমি জেএসকে সেই পরিবর্তনশীল দিয়ে কিছু করতে চাই:

<script type="text/javascript">
document.getElementById("img_id").backgroundImage="url('<?php echo $img_id; ?>')";
</script>

আপনি পিএইচপি এর মাধ্যমে সরাসরি এই জাতীয় কিছু ব্যবহার করে একই পরিবর্তনশীলটি উল্লেখ করতে পারেন:

<img src="<?php echo $img_id; ?>">

আমার জন্য কাজ কর ;)


2

খাঁটি কল করার সঠিক উপায় এটি। সিএসএস নেই।

<div style='background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAFCAYAAABW1IzHAAAAHklEQVQokWNgGPaAkZHxPyMj439sYrSQo51PBgsAALa0ECF30JSdAAAAAElFTkSuQmCC)repeat-x center;'></div>

<div style = 'পটভূমি: URL (ডাটা: image / jpeg; করুন Base64-, iVBORw0KGgoAAAANSUhEUgAAABwAAAAFCAYAAABW1IzHAAAAHklEQVQokWNgGPaAkZHxPyMj439sYrSQo51PBgsAALa0ECF30JSdAAAAAElFTkSuQmCC) পুনরাবৃত্তি-X কেন্দ্র;'> </ p>
user5641497

কোড পোস্ট করতে, এটিকে চারটি স্পেসে ইন্ডেন্ট করুন বা এটি নির্বাচন করুন এবং Ctrl-K টিপুন।

2

আমি মনে করি এটি সাহায্য করবে, বেস 64 একটি ভিন্নভাবে সিএসএস দ্বারা সম্বোধন করবে, আপনার চিত্রের ডেটা টাইপটি বেস 64 এ সেট করা উচিত, এটি সিএসএসকে বেস 64 কে চিত্রটিতে পরিবর্তন করতে এবং এটি ব্যবহারকারীর কাছে প্রদর্শন করতে সহায়তা করবে। এবং আপনি এটি জাভাস্ক্রিপ্ট থেকে jquery স্ক্রিপ্ট ব্যবহার করে পটভূমি চিত্র নির্ধারণ করে ব্যবহার করতে পারেন, এটি স্বয়ংক্রিয়ভাবে বেস 64 কে ম্যাগ করে প্রদর্শন করবে

url = "data:image;base64,"+data.replace(/(\r\n|\n|\r)/gm, "");
$("body").css("background-image", "url('" + url.replace(/(\r\n|\n|\r)/gm, "") + "')");


কোড-কেবল উত্তরগুলি নিরুৎসাহিত করা হয়। দয়া করে সম্পাদনাতে ক্লিক করুন এবং আপনার কোডটি প্রশ্নটিকে কীভাবে সম্বোধন করে তা সংক্ষেপ করে কিছু শব্দ যুক্ত করুন বা সম্ভবত আপনার উত্তরটি পূর্ববর্তী উত্তর / উত্তরগুলির থেকে আলাদা কীভাবে ব্যাখ্যা করুন। আমি এটি এবং পূর্ববর্তী পোস্ট করা উত্তরগুলির মধ্যে কোনও বাস্তব পার্থক্য দেখতে পাচ্ছি না।
নিক

0

আমার ক্ষেত্রে, এটা ঠিক, কারণ আমি সেট না ছিল heightএবং width

তবে আরও একটি বিষয় আছে।

পটভূমি চিত্র ব্যবহার করে সরানো যেতে পারে

element.style.backgroundImage=""

কিন্তু ব্যবহার করে সেট করা যায়নি

element.style.backgroundImage="some base64 data"

জ্যাকুরি ভাল কাজ করে।

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