কিভাবে একটি চিত্র বেস 64 এনকোডিং রূপান্তর করতে?


289

আপনি কি দয়া করে আমাকে গাইড করতে পারেন আমি কীভাবে কোনও চিত্রটি একটি ইউআরএল থেকে বেস 64 কে এনকোডিংয়ে রূপান্তর করতে পারি?


3
আপনি এই জন্য কি করতে চান?
পেক্কা

7
এটি
ইমগ

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

উত্তর:


570

আমি মনে করি এটি হওয়া উচিত:

$path = 'myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

10
এটি আপনার কীসের জন্য চিত্রটির প্রয়োজন তা নির্ভর করে। যদি এটি কোনও ইনলাইন ইউআরএল হিসাবে হয় তবে এটি যাওয়ার উপায়। যদিও এটি কেবল বেস 64 এনকোডিংয়ের সাথে অভিন্ন নয়।
পেক্কা

দুর্দান্ত টিপ, এখন আমি ফাইল আপলোড সম্পাদনা করার জন্য একটি ফাংশন তৈরি করব বা মুভি_আপলোডড ফাইল () রিভার্ট করবো, ধন্যবাদ
দে

120

সহজ:

$imagedata = file_get_contents("/path/to/image.jpg");
             // alternatively specify an URL, if PHP settings allow
$base64 = base64_encode($imagedata);

মনে রাখবেন যে এটি ডেটাটি 33% বাড়িয়ে তুলবে, এবং আপনার ফাইলগুলির সমস্যা হবে যার আকার আপনার ছাড়িয়ে যাবে memory_limit


1
@ ইন্না এটা করে! বেস 64 এনকোডিং সাধারণত এটি করবে।
পেক্কা

38

বেস 6464 এনকোড ফর্ম্যাটে চিত্রটি উপস্থাপন করতেও এইভাবে ব্যবহার করুন ... পিএইচপি ফাংশন file_get_contentএবং পরবর্তী ফাংশনটি ব্যবহার করুনbase64_encode

এবং স্ট্রিং হিসাবে ফলাফল প্রস্তুত data:" . file_mime_type . " base64_encoded string। এটি img src অ্যাট্রিবিউটে ব্যবহার করুন। নিম্নলিখিত কোড দেখুন আমি আপনার জন্য সাহায্য করতে পারেন।

// A few settings
$img_file = 'raju.jpg';

// Read image path, convert to base64 encoding
$imgData = base64_encode(file_get_contents($img_file));

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: '.mime_content_type($img_file).';base64,'.$imgData;

// Echo out a sample image
echo '<img src="'.$src.'">';

1
যদি ফাংশন mime_content_type সন্ধান করতে ব্যর্থ হয়েছে মাত্র ফাংশন svogal থেকে যোগ php.net/manual/en/function.mime-content-type.php
মারিও রুইজ

14

আপনি যদি অক্ষম (কারনের জন্য) ব্যবহার করতে হয় curlনা file_get_contents, আপনি কি আশেপাশে কাজ করতে পারেন:

$img = imagecreatefrompng('...');
ob_start();
imagepng($img);
$bin = ob_get_clean();
$b64 = base64_encode($bin);

এটি বেস 64 ইমেজ সহ দুর্দান্ত কাজ করে।
গ্রেগরি বোলোনা

10
<img src="data:image/png;base64,<?php echo base64_encode(file_get_contents("IMAGE URL HERE")) ?>">

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

আপনার চিত্রের ইউআরএল দিয়ে সবেমাত্র এখানে চিত্রের URL টি প্রতিস্থাপন করুন - http://www.website.com/image.jpg


6

খুব সাধারণ এবং সাধারণভাবে ব্যবহৃত:

function getDataURI($imagePath) {
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $type = $finfo->file($imagePath);
    return 'data:'.$type.';base64,'.base64_encode(file_get_contents($imagePath));
}

//Use the above function like below:
echo '<img src="'.getDataURI('./images/my-file.svg').'" alt="">';
echo '<img src="'.getDataURI('./images/my-file.png').'" alt="">';

দ্রষ্টব্য: ফাইলের মাইম-প্রকারটি স্বয়ংক্রিয়ভাবে যুক্ত হবে (এই পিএইচপি ডকুমেন্টেশনের সাহায্য নেবে )।


3

এনকোড করতে এবং এটি মাইএসকিউএলে সংরক্ষণের জন্য আপলোডের কোড এখানে

if (!isset($_GET["getfile"])) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Error: " . $_FILES["file"]["error"] . "<br>";
    } else {
        move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);

        $bin_string = file_get_contents($_FILES["file"]["name"]);
        $hex_string = base64_encode($bin_string);
        $mysqli = mysqli_init();

        if (!$mysqli->real_connect('localhost', 'root', '', 'arihant')) {
            die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
        }

        $mysqli->query("INSERT INTO upload(image) VALUES ('" . $hex_string . "')");
    }
}

চিত্রটি দেখানোর জন্য এটি ব্যবহার করুন

echo "<img src='data:image/jpeg;base64, $image' width=300>";

10
এই জন্য জিজ্ঞাসা করা হয়নি।
অ্যালেক্সিওভে

1

সিআরএল কল ব্যবহার করে এখানে একটি উদাহরণ দেওয়া হল .. এটি ফাইল_জেট_কন্টেন্টস () ফাংশনের চেয়ে ভাল । অবশ্যই, বেস 64 (এনকোড) ব্যবহার করুন ()

$url = "http://example.com";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
?>

<img src="data:image/png;base64,<?php echo base64_encode($output);?>">  

1
curlfile_get_contentsপ্রাক্তন কলটিতে আপনাকে অতিরিক্ত ডেটা যুক্ত করার প্রয়োজন না থাকলে এটি একেবারে "ভাল" নয় । প্রমাণীকরণ। অধিকন্তু, file_get_contentsযখন সম্ভব একটি স্থানীয় ফাইলের বিষয়বস্তু পেয়ে, এইভাবে একটি বেহুদা নেটওয়ার্কের কল করার না করার ফলব্যাক যাবে।
Hissvard

1

আপনি কার্লের মাধ্যমে এটিও করতে পারেন, কেবল আপনার একটি চিত্র ফাইলের একটি পাথ প্রয়োজন এবং এটি নীচে প্রদত্ত ফাংশনে পাস করুন ..

public static function getImageDataFromUrl($url)
{
    $urlParts = pathinfo($url);
    $extension = $urlParts['extension'];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $base64 = 'data:image/' . $extension . ';base64,' . base64_encode($response);
    return $base64;

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