একটি ব্লব প্রদর্শন করতে জাভাস্ক্রিপ্ট ব্যবহার করা


96

আমি একটি ডাটাবেস থেকে একটি ব্লব চিত্র উদ্ধার করছি, এবং আমি জাভাস্ক্রিপ্ট ব্যবহার করে সেই চিত্রটি দেখতে সক্ষম হতে চাই। নিম্নলিখিত কোডটি পৃষ্ঠায় একটি ভাঙা চিত্র আইকন তৈরি করে:

var image = document.createElement('image');
    image.src = 'data:image/bmp;base64,'+Base64.encode(blob);
    document.body.appendChild(image);

ব্লব সহ প্রয়োজনীয় সমস্ত কোড সম্বলিত একটি জেএসফিডেল এখানে রয়েছে। সম্পূর্ণ কোডটি সঠিকভাবে একটি চিত্র প্রদর্শিত হবে।


ফোটা ফর্ম্যাট কি? এটি কোনও ফর্ম্যাট (jpeg, png, gif ইত্যাদি) বা কেবল আরজিবি বাইটে কোনও চিত্র?
বজরেন্ড

4
এর document.createElement('img');পরিবর্তে হওয়া উচিত নয়document.createElement('image');?
পাবলো লোজনো

উত্তর:


121

আপনি এক্সএমএলএইচটিপিআরকোয়েস্ট থেকে সরাসরি BLOB অবজেক্টটি পেতে পারেন। ফোলাতে প্রতিক্রিয়া টাইপ সেট করা কৌশলটি তৈরি করে। আমার কোডটি এখানে:

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://localhost/image.jpg");
xhr.responseType = "blob";
xhr.onload = response;
xhr.send();

এবং প্রতিক্রিয়া ফাংশনটি এর মতো দেখাচ্ছে:

function response(e) {
   var urlCreator = window.URL || window.webkitURL;
   var imageUrl = urlCreator.createObjectURL(this.response);
   document.querySelector("#image").src = imageUrl;
}

আমাদের কেবল এইচটিএমএলে একটি খালি চিত্র উপাদান তৈরি করতে হবে:

<img id="image"/>

23
গুরুত্বপূর্ণ লাইনটি urlCreator.createObjectURL(blob)যা কোনও চিত্র ইউআরএল দেয় যা একটি চিত্র এসসিআরকে দেওয়া যেতে পারে।
এজেন্ট 47 ডার্কসোল

7
একবার কল করে তৈরি করা ইউআরএল প্রত্যাহার করতে ভুলবেন না; রিভোকোবজেক্ট ইউআরএল
রালফারু

আমি অনুমান করি, যে ওপি ভাবমূর্তি ক্ষেত্রের কিছু হয় মধ্যে একটি ডিবি, অর্থাত্ ওপি এটা পেতে পারে না সরাসরি । যদি তিনি এটি করতে সক্ষম হন তবে সম্ভবত তিনি এক্সএইচআর / আনার পরিবর্তে সরাসরি একটি imgট্যাগ ব্যবহার করবেন ; কারণ উভয়ই এসওপি প্রবণ।
খ্রিস্টান উলব্রিচ

78

আপনি যদি এর পরিবর্তে আনতে চান:

var myImage = document.querySelector('img');

fetch('flowers.jpg').then(function(response) {
  return response.blob();
}).then(function(myBlob) {
  var objectURL = URL.createObjectURL(myBlob);
  myImage.src = objectURL;
});

উৎস:

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/ Use_Fetch


চিত্রটি বেস 64 এনকোডযুক্ত হওয়ায় এটি কি স্বয়ংক্রিয়ভাবে বেস 64 কে রূপান্তর করবে?
পি সতীশ প্যাট্রো

4
আমি আপনাকে ভালবাসি .. আমি এটি না পাওয়া পর্যন্ত সমাধানের চেষ্টা করে 4 ঘন্টা ব্যয় করেছি।
tinyCoder

যা ঘটেif (typeof URL !== "function") {}
ander ই

20

কাঁচা ডেটা পেতে আপনি আপনার স্ট্রিংটিকে একটি ইউন্ট 8আরে রূপান্তর করতে পারেন । তারপর একটি তৈরি ব্লব যে ডেটা এবং পাস URL.createObjectURL (ফোঁটা) একটি URL যে আপনি পাস মধ্যে ব্লব রূপান্তর করতে img.src

var data = '424D5E070000000000003E00000028000000EF...';

// Convert the string to bytes
var bytes = new Uint8Array(data.length / 2);

for (var i = 0; i < data.length; i += 2) {
    bytes[i / 2] = parseInt(data.substring(i, i + 2), /* base = */ 16);
}

// Make a Blob from the bytes
var blob = new Blob([bytes], {type: 'image/bmp'});

// Use createObjectURL to make a URL for the blob
var image = new Image();
image.src = URL.createObjectURL(blob);
document.body.appendChild(image);

আপনি সম্পূর্ণ উদাহরণটি এখানে দেখতে পারেন: http://jsfiddle.net/nj82y73d/


14

আপনার উদাহরণে, আপনার উচিত createElement('img')

আপনার লিঙ্কে base64blob != Base64.encode(blob),।

এটি কাজ করে, যতক্ষণ না আপনার ডেটা বৈধ হয় http://jsfiddle.net/SXFwP/ (আমার কাছে কোনও বিএমপি চিত্র নেই তাই আমার পিএনজি ব্যবহার করতে হয়েছিল)।


আইএমজি উপর ভাল পয়েন্ট। আপনার অবশ্যই লক্ষ্য করা উচিত যে 'img' একটি এইচটিএমএল চিত্র উপাদান যেখানে 'চিত্র' টাইপ চিত্রের একটি এইচটিএমএল ইনপুট উপাদান, যদিও এই ক্ষেত্রে এটি কোনও পার্থক্য করেনি। আমি অভিমানী করছি যে ইমেজ তথ্য নেই , বৈধ যেমন 3 য় পক্ষের উৎস থেকে আসছে। আপনি কি এটি পরীক্ষা করার পরেও জানেন? বা একটি সহজ সাইট যা আপলোড করা চিত্র থেকে ব্লব দেয়? আমি
বিএমপি'র

আপনার ফিডেলের "ব্লব" আসলে একটি ব্লব নয়। আপনি একটি বেস 64 এনকোডেড স্ট্রিং ব্যবহার করেছেন।
এলিওটওয়েসফ

5

আমার ধারণা আপনার চিত্রের ইনলাইন কোডে আপনার একটি ত্রুটি ছিল। এটা চেষ্টা কর :

var image = document.createElement('img');
    
image.src="data:image/gif;base64,R0lGODlhDwAPAKECAAAAzMzM/////wAAACwAAAAADwAPAAACIISPeQHsrZ5ModrLlN48CXF8m2iQ3YmmKqVlRtW4MLwWACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw==";
    
image.width=100;
image.height=100;
image.alt="here should be some image";
    
document.body.appendChild(image);

সহায়ক লিঙ্ক: http://dean.edwards.name/my/base64-ie.html


3

সমস্যাটি হ'ল আমার কাছে হেক্সাডেসিমাল ডেটা ছিল যা বেস 64 এর কোডিং হওয়ার আগে বাইনারিতে রূপান্তর করা দরকার।

পিএইচপি ইন:

base64_encode(pack("H*", $subvalue))

0

ফ্রিডলে আপনার ব্লবটি একটি ব্লব নয়, এটি হেক্সাডেসিমাল ডেটার একটি স্ট্রিং প্রতিনিধিত্ব। এটি একটি ব্লব এবং আপনার কাজ করে দেখুন

var image = document.createElement('img');
let reader=new FileReader()
reader.addEventListener('loadend',()=>{
  let contents=reader.result
  image.src = contents
  document.body.appendChild(image);
})
if(blob instanceof Blob) reader.readAsDataURL(blob)

পড়ুনএসডাটা URL আপনাকে আপনার জন্য ইমেজ উপাদান () উত্স (এসআরসি) এর জন্য একটি বেস 64 এনকোডযুক্ত চিত্র দেবে

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