Upload Multiple Images and Generate Large Size - image

I have already generated a code that will upload multiple images in codeigniter, however I can't generate a large size of the uploaded images to other directory using codeigniter image library.
Using the codes below, it will only generate one image even though if the user uploaded multiple images.
function insert_prod(){
$foldername = $_POST['folder'];
$path = './uploads/products/'.$foldername;
mkdir($path, 0777, true);
mkdir($path.'/zoomimages', 0777, true);
$config = array();
$config['upload_path'] = $path;
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '0';
$config['overwrite'] = FALSE;
$this->load->library('upload');
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for($i=0; $i<$cpt; $i++){
$_FILES['userfile']['name']= $files['userfile']['name'][$i];
$_FILES['userfile']['type']= $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error']= $files['userfile']['error'][$i];
$_FILES['userfile']['size']= $files['userfile']['size'][$i];
$config['file_name'] = 'img_'.$i;
$this->upload->initialize($config);
$this->upload->do_upload();
$upload_data = array('upload_data' => $this->upload->data());
$full_path = $upload_data['upload_data']['full_path'];
$u_data = $upload_data['upload_data'];
// var_dump( $this->upload->data());
// var_dump($upload_data);
echo $cpt;
$config1['image_library'] = 'gd2';
$config1['source_image'] = $full_path;
$config1['new_image'] =$path.'/zoomimages';
$config1['create_thumb'] = FALSE;
$config1['maintain_ratio'] = TRUE;
$config1['width'] = 300;
$config1['height'] = 300;
$this->load->library('image_lib', $config1);
$this->image_lib->resize();
$this->image_lib->clear();
}
}

You are loading library with $this->load->library('image_lib', $config1); inside your loop so codeigniter see the class is already load so its not setting your $config1 again
Move $this->load->library('image_lib'); out side your loop
Then add $this->image_lib->initialize($config1); instant of $this->load->library('image_lib', $config1);

Related

Codeigniter: resizing multiple uploaded images gets only one image resized

I'm trying to resize all uploaded images uploaded from a form and save a resized copy in another folder. This method works fine with a single image upload not in a multiple image upload. The issue here that I get only 1 image resized. Here's the upload and resize code:
$this->load->library('upload');
$dataInfo = array();
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for($i=0; $i<$cpt; $i++)
{
$_FILES['userfile']['name']= $files['userfile']['name'][$i];
$_FILES['userfile']['type']= $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error']= $files['userfile']['error'][$i];
$_FILES['userfile']['size']= $files['userfile']['size'][$i];
$config = array();
$config['upload_path'] = realpath(APPPATH . '../images/myfolder/');
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '2000';
$config['overwrite'] = FALSE;
$rand_string = $this->generateRandomString(3);
$ext = strtolower(pathinfo($_FILES['userfile']['name'], PATHINFO_EXTENSION));
$filename = round(microtime(true) * 1000).$rand_string.'.'.$ext;
$config['file_name'] = $filename;
$this->upload->initialize($config);
if ($this->upload->do_upload('userfile')) {
$this->resizeImage($filename);
$dataInfo[] = $this->upload->data();
}
}
Resizing function
public function resizeImage($filename)
{
$source_path = realpath(APPPATH . '../images/myfolder/'.$filename) ;
$target_path = realpath(APPPATH . '../images/myfolder/thumbs/') ;
$config_manip = array(
'image_library' => 'gd2',
'source_image' => $source_path,
'new_image' => $target_path,
'maintain_ratio' => TRUE,
'create_thumb' => TRUE,
'thumb_marker' => '',
'width' => 200,
'height' => 200
);
$this->load->library('image_lib', $config_manip);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
exit;
}
$this->image_lib->clear();
}
But I get just 1 image resize though all images are uploaded not just one. Why is this happening and how to fix i?
Assuming that all your images are getting uploaded (that is the case right?) then I would suggest trying: $this->upload->initialize($config, true); and:
$this->load->library('image_lib');
$this->image_lib->initialize($config_manip);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
exit;
}

Codeigniter Image watermark using image library

I want apply watermark on multiple images after uploading. Right now the images are uploading but all are without watermark and also I want to reduce the quality of uploading image.
public function do_upload()
{
$this->load->library('upload');
$name_array = array();
$files = $_FILES;
$cpt = count($_FILES['userfile1']['name']);
for($i=0; $i<=$cpt-1; $i++)
{
$_FILES['userfile']['name']= $files['userfile1']['name'][$i];
$_FILES['userfile']['type']= $files['userfile1']['type'][$i];
$_FILES['userfile']['tmp_name']= $files['userfile1']['tmp_name'][$i];
$_FILES['userfile']['error']= $files['userfile1']['error'][$i];
$_FILES['userfile']['size']= $files['userfile1']['size'][$i];
$this->upload->initialize($this->set_upload_options());
if($data = $this->upload->do_upload()){
$config['source_image'] = $files['userfile1']['tmp_name'][$i]; //get original image
$config['wm_type'] = 'overlay';
$config['wm_overlay_path'] = './portfolio_img/ninja.png';
$config['quality'] = 50;
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'right';
$this->load->library('image_lib', $config);
$this->image_lib->watermark();
}
$name_array[] = $this->upload->data('file_name');
}
return $name_array;
}
private function set_upload_options()
{
//upload an image options
$config = array();
$config['upload_path'] = './portfolio_img/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '0';
$config['overwrite'] = FALSE;
return $config;
}
Watermark method need image path you are passing tem_path hope this will work
try this
$config['source_image'] = './portfolio_img/' . $files['userfile1']['name'][$i]
it is working for me
UDATE
please load library before the loop and change source_image name each time.
$config['source_image'] = '';
$config['wm_type'] = 'overlay';
$config['wm_overlay_path'] = './portfolio_img/ninja.png';
$config['quality'] = 50;
$config['wm_vrt_alignment'] = 'bottom';
$config['wm_hor_alignment'] = 'right';
$this->load->library('image_lib', $config);
for($i=0; $i<=$cpt-1; $i++)
{
$_FILES['userfile']['name']= $files['userfile1']['name'][$i];
$_FILES['userfile']['type']= $files['userfile1']['type'][$i];
$_FILES['userfile']['tmp_name']= $files['userfile1']['tmp_name'][$i];
$_FILES['userfile']['error']= $files['userfile1']['error'][$i];
$_FILES['userfile']['size']= $files['userfile1']['size'][$i];
$this->upload->initialize($this->set_upload_options());
if($data = $this->upload->do_upload()){
$config['source_image'] = './portfolio_img/' . $files['userfile1']['name'][$i]
$this->image_lib->initialize($config);
$this->image_lib->watermark();
}
$name_array[] = $this->upload->data('file_name');
}

I want to resize uploaded image in codeigniter but it is not working

I want to resize uploaded image in codeigniter but it is not working with this code. Image uploading successfully but I want to resize it to 110x110 and display it !
my code is here
class Upload_photo extends CI_Controller{
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
public function index(){
session_start();
$u = $_SESSION['username'];
$config['upload_path'] = 'user/'.$u.'/'.$filename;
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '30000';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload',$config);
if(!$this->upload->do_upload('file1'))
{
echo "Error". $this->upload->display_errors();
}
else {
$config['image_library'] = 'GD2';
$config['source_image'] = $config['upload_path'];
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 110;
$config['height'] = 110;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
echo 'Photo Uploaded Successfully';
}
}
}
First you upload the original image so set the configs and upload the original image, then you resize the image. With that said:
$fullPath = 'user/' . $u . '/';
$config['upload_path'] = $fullPath;
$config['file_name'] = 'theNameofFile';
$config['allowed_types'] = 'jpg|png|bmp';
$config['max_size'] = '30000';
$config['overwrite'] = FALSE;
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload', $config);
if($this->upload->do_upload('file1') == FALSE)
{
echo "Error:" . $this->upload->display_errors();
return;
}
At this point the the file was uploaded. Now you need to grab it and resize.
// Reset
$config = array();
$config['image_library'] = 'gd2';
$config['source_image'] = $fullPath . $this->upload->data()['file_name'];
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = TRUE;
$config['width'] = 100;
$config['height'] = 100;
$this->load->library('image_lib', $config);
$this->image_lib->resize();
Finally, if you wish to, you can delete the original image.
If you want both images 1>uploded image 2>Thumbnail Image and want to store Thumbnail image to different folder you should use $config['new_image'] and path should not your url but should be absolute server path. If you don't know how to get absolute server path ? you can see my code below.
I got the solution, my code is here
class Upload_photo extends CI_Controller{
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
}
public function index(){
session_start();
$u = $_SESSION['username'];
$config['upload_path'] = 'user/'.$u;
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '30000';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$this->load->library('upload',$config);
$filename = $_FILES['file1']['name'];
//echo $filename;
//echo $source;
if(!$this->upload->do_upload('file1'))
{
echo "Error". $this->upload->display_errors();
return;
}
$config = array();
$config['image_library'] = 'gd2';
$config['source_image'] = 'user/'.$u.'/'.$filename ;
$config['new_image']= FCPATH . 'user/'.$u.'/Thumb/';
$config['create_thumb'] = TRUE;
$config['maintain_ratio'] = FALSE;
$config['width'] = 110;
$config['height'] = 110;
$this->load->library('image_lib',$config);
if(!$this->image_lib->resize())
{
echo $this->image_lib->display_errors();
}
}
}

How to get the name of userfiles in controller to add to database

This is the code so far.
I have 2 images that are getting uploaded and added to the desired map.
My question is, how do i get both names from the images so I can add just the names to the database together with my other form information.
public function CreateTypesForGamma() {
$type = new stdClass();
$type->TypeID = $this->input->post('typeID') == 0 ? null : $this->input->post('typeID');
$type->Titel = $this->input->post('titel');
$type->TechnischeFiche = $this->input->post('technischeFiche');
$type->GammaID = $this->input->post('gammaID');
$type->ExtLink = $this->input->post('extLink');
$type->InfoNL = $this->input->post('infoNL');
$type->InfoFR = $this->input->post('infoFR');
$type->InfoEN = $this->input->post('infoEN');
$files = $_FILES;
$cpt = count($_FILES['userfile']['name']);
for($i=0; $i<$cpt; $i++)
{
$_FILES['userfile']['name']= $files['userfile']['name'][$i];
$_FILES['userfile']['type']= $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error']= $files['userfile']['error'][$i];
$_FILES['userfile']['size']= $files['userfile']['size'][$i];
$this->upload->initialize($this->set_upload_options());
$this->upload->do_upload();
$fileName = $_FILES['userfile']['name'];
if ($i == 0)
$images[] = $fileName;
}
$fileName = implode(',',$images);
$this->gamma_model->upload_image($fileName);
system.out.println($images);
if ($type->TypeID == 0) {
$type->TypeID = $this->type_model->insert($type);
} else {
$this->type_model->update($type);
}
redirect('gamma/viewAdminGamma');
}
private function set_upload_options()
{
// upload an image options
$config = array();
$config['upload_path'] = APPPATH . 'images/types'; //give the path to upload the image in folder
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '5120';
$config['overwrite'] = FALSE;
return $config;
}
Change the code to following
$cpt = count($_FILES['userfile']['name']);
for($i=0; $i<$cpt; $i++)
{
$_FILES['userfile']['name']= $files['userfile']['name'][$i];
$_FILES['userfile']['type']= $files['userfile']['type'][$i];
$_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
$_FILES['userfile']['error']= $files['userfile']['error'][$i];
$_FILES['userfile']['size']= $files['userfile']['size'][$i];
$this->upload->initialize($this->set_upload_options());
$this->upload->do_upload();
$fileName = $_FILES['userfile']['name'];
$images[] = $fileName;
$type->TypeFoto=$fileName[0];// this gives name of first
image
$type->Lastentabel =$fileName[1];
}
$fileName = implode(',',$images);
$this->gamma_model->upload_image($fileName);
system.out.println($images);
if ($type->TypeID == 0) {
$type->TypeID = $this->type_model->insert($type);
} else {
$this->type_model->update($type);
}
redirect('gamma/viewAdminGamma');
}
private function set_upload_options()
{
// upload an image options
$config = array();
$config['upload_path'] = APPPATH . 'images/types'; //give the path to upload the image in folder
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '5120';
$config['overwrite'] = FALSE;
return $config;
}

CodeIgniter upload one image to two directory

I would like to upload one image to different directory in CodeIgniter, so one images are stored in 2 folders.
Path one etc/www/image1/ and path two etc/www/image2/
Code
$config[‘upload_path’] =‘etc/www/image1/’;
$config[‘allowed_types’] = ‘jpg|jpeg|gif|png’;
$config[‘file_name’]=“imageone.jpg”;
$config[‘max_size’] = ‘10000’;
$this->upload->initialize($config);
if(!$this->upload->do_upload(‘userfile’)){
echo $this->upload->display_errors();
}else {
$this->upload->data(‘userfile’);
}
Just use PHP's Copy() function after you have uploaded the file successfully in your CI controller method...
EX:
$file = '/www/image1/example.txt';
$newfile = '/www/image1/example.txt';
if (!copy($file, $newfile)) {
echo "failed to copy $file...\n";
}
$config['upload_path'] = FCPATH.'upload/';
$config['allowed_types'] = FCPATH.'gif|jpg|jpeg|png';
$config['encrypt_name'] = TRUE;
$this->load->library('upload',$config);
$upload = $this->upload->do_upload("resim");
if($upload){
$resim = $this->upload->data();
$resimadi = $resim['file_name'];
$resimkayit = 'upload/'.$resimyolu.'';
$resimhotnews = 'upload/hotnews'.$resimadi.'';
$resimlastnews = 'upload/lastnews'.$resimadi.'';
$config['image_library'] = 'gd2';
$config['source_image'] = 'upload/'.$resimadi.'';
$config['new_image'] = 'upload/hotnews'.$resimadi.'';
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = FALSE;
$config['quality'] = '%80';
$config['width'] = 500;
$config['height'] = 350;
$this->load->library('image_lib', $config);
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->image_lib->clear();
//tmb folder resim uploading end
//mini folder resim uploading start
$config1['image_library'] = 'gd2';
$config1['source_image'] = 'upload/'.$resimadi.'';
$config1['new_image'] = 'upload/lastnews/'.$resimadi.'';
$config1['create_thumb'] = FALSE;
$config1['maintain_ratio'] = FALSE;
$config1['quality'] = '%80';
$config1['width'] = 200;
$config1['height'] = 150;
$this->load->library('image_lib', $config1);
$this->image_lib->initialize($config1);
$this->image_lib->resize();
$this->image_lib->clear();
//on mac computers you have to give a writable permission for the folders

Resources