Saya menggunakan alat JavaScript "Canvas2Image" Nihilogic untuk mengonversi gambar kanvas ke gambar PNG. Yang saya butuhkan sekarang adalah untuk mengubah string base64 yang dihasilkan alat ini, menjadi file PNG aktual di server, menggunakan PHP.
Singkatnya, apa yang saya lakukan saat ini adalah membuat file di sisi klien menggunakan Canvas2Image, kemudian mengambil data yang di-encode base64 dan mengirimkannya ke server menggunakan AJAX:
// Generate the image file
var image = Canvas2Image.saveAsPNG(canvas, true);
image.id = "canvasimage";
canvas.parentNode.replaceChild(image, canvas);
var url = 'hidden.php',
data = $('#canvasimage').attr('src');
$.ajax({
type: "POST",
url: url,
dataType: 'text',
data: {
base64data : data
}
});
Pada titik ini, "hidden.php" menerima blok data yang terlihat seperti data: image / png; base64, iVBORw0KGgoAAAANSUhEUgAABE ...
Mulai saat ini, saya cukup bingung. Dari apa yang saya baca, saya percaya bahwa saya seharusnya menggunakan fungsi imagecreatefromstring PHP , tapi saya tidak yakin bagaimana benar-benar membuat gambar PNG yang sebenarnya dari string yang dikodekan base64 dan menyimpannya di server saya. Tolong bantu!
sumber
Jawaban:
Anda perlu mengekstrak data gambar base64 dari string itu, mendekodekannya dan kemudian Anda dapat menyimpannya ke disk, Anda tidak perlu GD karena sudah png.
Dan sebagai one-liner:
Metode yang efisien untuk mengekstraksi, decoding, dan memeriksa kesalahan adalah:
sumber
$type
mendapat nilai dari ledakan, tergantung pada apakah itu data: image / jpg atau data: image / png dll.Coba ini:
file_put_contents docs
sumber
data:image/png;base64,
yang memecah file.data:image/png;base64,
string yang Anda lewatibase64_decode
tidak base64 valid. Anda hanya perlu mengirim data, itulah yang menggambarkan jawaban drew010. Tidak ada yang rusak dengan jawaban ini. Anda tidak dapat menyalin dan menempel tanpa memahami dan mengharapkannya "berfungsi".Saya harus mengganti spasi dengan simbol plus
str_replace(' ', '+', $img);
untuk membuatnya berfungsi.Ini kode lengkapnya
Semoga itu bisa membantu.
sumber
$img = str_replace(' ', '+', $img);
banyak membantu saya, terima kasih! Mengapa saya harus mengubah spasi menjadi "+" sebelumnya?Layak untuk mengatakan bahwa topik yang dibahas didokumentasikan dalam RFC 2397 - Skema URL "data" ( https://tools.ietf.org/html/rfc2397 )
Karena PHP ini memiliki cara asli untuk menangani data seperti itu - "data: stream wrapper" ( http://php.net/manual/en/wrappers.data.php )
Jadi Anda dapat dengan mudah memanipulasi data Anda dengan aliran PHP:
sumber
preg_replace
+file_put_contents
?Nah solusi Anda di atas tergantung pada gambar menjadi file jpeg. Untuk solusi umum yang saya gunakan
sumber
Diambil ide @ dre010, saya telah memperluasnya ke fungsi lain yang bekerja dengan semua tipe gambar: PNG, JPG, JPEG atau GIF dan memberikan nama unik ke nama file
Fungsi memisahkan data gambar dan tipe gambar
sumber
Total keprihatinan:
sumber
Solusi satu linier.
sumber
berdasarkan contoh drew010 saya membuat contoh untuk memudahkan pemahaman.
sumber
coba ini...
sumber
Kode ini berfungsi untuk saya, periksa kode di bawah ini:
sumber
Fungsi ini seharusnya berfungsi. ini memiliki parameter foto yang menahan string base64 dan juga path ke direktori gambar yang sudah ada seandainya Anda sudah memiliki gambar yang sudah ada yang ingin Anda batalkan tautannya saat menyimpan yang baru.
sumber
Itu mudah :
Bayangkan Anda mencoba mengunggah file ke dalam kerangka js, permintaan ajax, atau aplikasi seluler (sisi Klien)
Berikut cara melakukannya menggunakan PHP
sumber
Jika Anda ingin mengubah nama gambar secara acak, dan menyimpan jalur gambar pada basis data sebagai gumpalan dan gambar itu sendiri di folder solusi ini akan membantu Anda. Pengguna situs web Anda dapat menyimpan gambar sebanyak yang mereka inginkan sementara gambar akan diganti secara acak untuk tujuan keamanan.
Kode php
Hasilkan varchars acak untuk digunakan sebagai nama gambar.
Dapatkan ekstensi data gambar dan bagian base_64 (bagian setelah data: image / png; base64,) dari gambar.
sumber
PHP sudah memiliki base64 perlakuan yang adil -> transformasi file
Saya menggunakan untuk menyelesaikannya dengan cara ini:
sumber