PHP - get base64 img string decode and save as jpg (resulting empty image )
AFAIK, You have to use image function imagecreatefromstring, imagejpeg to create the images.
$imageData = base64_decode($imageData);
$source = imagecreatefromstring($imageData);
$rotate = imagerotate($source, $angle, 0); // if want to rotate the image
$imageSave = imagejpeg($rotate,$imageName,100);
imagedestroy($source);
Hope this will help.
PHP CODE WITH IMAGE DATA
$imageDataEncoded = base64_encode(file_get_contents('sample.png'));
$imageData = base64_decode($imageDataEncoded);
$source = imagecreatefromstring($imageData);
$angle = 90;
$rotate = imagerotate($source, $angle, 0); // if want to rotate the image
$imageName = "hello1.png";
$imageSave = imagejpeg($rotate,$imageName,100);
imagedestroy($source);
So Following is the php part of your program .. NOTE
the change with comment Change is here
$uploadedPhotos = array('photo_1','photo_2','photo_3','photo_4');
foreach ($uploadedPhotos as $file) {
if($this->input->post($file)){
$imageData = base64_decode($this->input->post($file)); // <-- **Change is here for variable name only**
$photo = imagecreatefromstring($imageData); // <-- **Change is here**
/* Set name of the photo for show in the form */
$this->session->set_userdata('upload_'.$file,'ant');
/*set time of the upload*/
if(!$this->session->userdata('uploading_on_datetime')){
$this->session->set_userdata('uploading_on_datetime',time());
}
$datetime_upload = $this->session->userdata('uploading_on_datetime',true);
/* create temp dir with time and user id */
$new_dir = 'temp/user_'.$this->session->userdata('user_id',true).'_on_'.$datetime_upload.'/';
if(!is_dir($new_dir)){
@mkdir($new_dir);
}
/* move uploaded file with new name */
// @file_put_contents( $new_dir.$file.'.jpg',imagejpeg($photo));
imagejpeg($photo,$new_dir.$file.'.jpg',100); // <-- **Change is here**
}
}
How to convert an image to Base64 encoding
I think that it should be:
$path = 'myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
PHP base64_decode yields invalid image file
%
characters are not allowed in the b64 set. It looks like your string is url-encoded. urldecode()
it before passing it to base64_decode()
.
It works in the browser like it is because they always decode url attributes.
Get image type from base64 encoded src string
Well you have basically two options:
- Trust the metadata
- Type check the image source directly
Option 1:
Probably the quicker way because it only involve splitting string, but it may be incorrect.
Something like:
$data = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAA.';
$pos = strpos($data, ';');
$type = explode(':', substr($data, 0, $pos))[1];
Option 2:
Use getimagesize()
and it's equivalent for string:
$info = getimagesizefromstring(explode(',', base64_decode($data)[1], 2));
// $info['mime']; contains the mimetype
Related Topics
Add a Prefix to Each Item of a PHP Array
PHP - Remove <Img> Tag from String
How to Use Regexiterator in PHP
How to Change/Custom Password Field Name for Laravel 4 and Laravel 5 User Authentication
Is PHP's Count() Function O(1) or O(N) for Arrays
PHP Form - on Submit Stay on Same Page
Mongodb: Fatal Error: Class 'Mongoclient' Not Found
How to Add an Order by Clause Using Codeigniter's Active Record Methods
Dom Parser That Allows HTML5-Style </ in <Script> Tag
How to Insert Multiple Checkbox Values into a Table
Php. How to Use Array_Column with an Array of Objects
Are There Limits for Session Variables
How to Use Prepared Statements in Codeigniter
How to Merge Transparent Png with Image Using PHP