Php 如何在使用codeigniter上传原始图像后裁剪和接收两幅图像
我创建了一个库,只需上传一幅图像,根据路径、宽度和高度对其进行裁剪。但我不知道如何让它裁剪出我想要的图像,并返回它创建的所有文件名的数组。这是我的图书馆,请告诉我是否有好的方法。谢谢Php 如何在使用codeigniter上传原始图像后裁剪和接收两幅图像,php,codeigniter,class,gd2,Php,Codeigniter,Class,Gd2,我创建了一个库,只需上传一幅图像,根据路径、宽度和高度对其进行裁剪。但我不知道如何让它裁剪出我想要的图像,并返回它创建的所有文件名的数组。这是我的图书馆,请告诉我是否有好的方法。谢谢 <?php /* Usage: ----------------------------------------------------------------------- $this->load->library('up_image'); $this->l
<?php
/*
Usage:
-----------------------------------------------------------------------
$this->load->library('up_image');
$this->logo = $this->up_image->upload_image(upload_path, width, height);
*/
class up_image
{
/**
* Upload Image Method
* ----------------------
* @Param: Upload Path
* @Param: Width:
* @Param: Height:
**/
public function upload_image($path, $width, $height)
{
//load codeigniter instant to load stuff
$CI =& get_instance();
$config1 = array(
'allowed_types' => 'jpg|jpeg|png',
'upload_path' => $path,
'max_size' => 4000,
'remove_spaces' => TRUE,
'encrypt_name' => TRUE
);
$CI->load->library('upload', $config1);
$CI->upload->display_errors('<p class="errors">', '</p>');
//if upload do something
if($CI->upload->do_upload())
{
$image_data = $CI->upload->data();
$config2 = array(
'image_library' => 'gd2',
'source_image' => $image_data['full_path'],
'new_image' => $path . '/' . $image_data['file_name'],
'maintain_ratio' => TRUE,
'width' => $width,
'height' => $height
);
$CI->load->library('image_lib', $config2);
$CI->image_lib->resize();
return $image_data['file_name'];
}
else
{
return FALSE;
}
}
}
将裁剪方法与上载方法分开 上传后,分别对上传的文件执行两次裁剪 删除上传的临时文件。文件
完成。谢谢,我已经完成了,但只完成了第一次调整大小,第二次没有。图像_lib>resize()是否创建了另一个图像,还是我需要自己创建?我还调用了image_lab->clear(),因为它正在创建一个全黑图像。我已经发布了更新类的粘贴。CI resize()方法将调整大小的图像保存在“new_image”参数中指定的任何位置。它只保留源图像,因此您应该能够在源图像上运行另一个调整大小操作。在这种情况下,我认为您正在覆盖您的第二次调整大小相同的新图像。另外,我认为您在resize方法中返回了错误的文件名,您应该返回新的_图像文件名。在方法参数列表中包含目标文件名(新图像)可能会有所帮助。调整大小($data,$width,$height,$new_file)我已经更新了它,这对我来说是有效的,我应该改变它还是它很酷?谢谢:)实际上,如果你只需要创建一个拇指,你可以在$CI->image_lib->clear()之后再次运行resize,此外,CI在图像调整库中还有一个内置的缩略图选项。你现在要做的是再次上传缩略图,这有点多余,浪费资源。我试过了,我无法获得缩略图和其他文件的名称。我只收到了缩略图的名字作为回报。也许我应该得到新的图像文件名,让它正常工作?
<?php
/*
Author: Sarmen B
URL: sarmenb.com
*/
class up_image
{
var $path = '';
/**
* Upload Image
* ----------------------
* @Param: Upload Path
* @Param: Width
* @Param: Height
**/
public function upload_image()
{
//load codeigniter instant to load stuff
$CI =& get_instance();
$config = array(
'allowed_types' => 'jpg|jpeg|png',
'upload_path' => $this->path,
'max_size' => 4000,
'remove_spaces' => TRUE,
'encrypt_name' => TRUE
);
$CI->load->library('upload', $config);
$CI->upload->display_errors('<p class="errors">', '</p>');
//if upload do something
if($CI->upload->do_upload())
{
//returns the images data as an array
return $CI->upload->data();
}
else
{
return FALSE;
}
}
/**
* Resize the image
* ----------------------
* @Param: $data data returned from upload_image()
* @Param: Width
* @Param: Height
**/
public function resize($data, $width, $height)
{
$CI =& get_instance();
$config = array(
'image_library' => 'gd2',
'source_image' => $data['full_path'],
'new_image' => $this->path . '/' . $data['file_name'],
'maintain_ratio' => TRUE,
'width' => $width,
'height' => $height,
'create_thumb' => FALSE
);
$CI->load->library('image_lib', $config);
$CI->image_lib->resize();
$CI->image_lib->clear();
unset($config);
return $data['file_name'];
}
}
$img1 = $this->up_image->upload_image();
$thumb = $this->up_image->resize($img1, 140, 120);
$img2 = $this->up_image->upload_image();
$large = $this->up_image->resize($img2, 420, 360);