我正努力让CodeIgniter Image Manipulation正常工作。要么它是一个错误,要么我只是没有看到它。我希望有人可以帮助我。提前谢谢!
在脚本上:我想创建缩略图(176w x 132h)。输入图像具有不同的尺寸和比例。为了始终获得此尺寸,我首先调整它们以适应最大宽度或高度(取决于图像方向),然后在中心裁剪。 我试图用1种方法完成所有操作。这没有用,所以我创建了两个单独的方法。
resize_img()
和
crop_img().
当我在3个不同的文件上运行resize_img()时,它可以工作。如果之后我在这些缩略图上使用crop_img()创建了第1个方法,它就可以了。如果我将两者结合起来,或者一个接一个地使用它们,它就不会。 我尝试过$ this-> image_lib-> clear();,取消设置配置文件。我甚至创建了两个配置文件,只是为了确定。
我从GD2得到了各种各样的错误,但问题是,在resize_img()创建缩略图之后,crop_img()不会裁剪它。之后一切都向南,下一个图像无法打开。在文件夹和文件上都会检查写入预先确认。
无法保存图像。请确保图像和文件 目录是可写的。图像的路径不正确。您的 服务器不支持处理此类型所需的GD功能 图像。
完整代码:
<?PHP
class Imagetest extends MY_Controller {
function __construct()
{
parent::__construct();
$this->load->library('image_lib');
}
function index()
{
$testimg1 = 'uploads/test/1.png';
$testimg2 = 'uploads/test/2.png';
$testimg3 = 'uploads/test/3.png';
$this->resize_img($testimg1);
$this->crop_img($testimg1);
$this->resize_img($testimg2);
$this->crop_img($testimg2);
$this->resize_img($testimg3);
$this->crop_img($testimg3);
}
function image_thumb_name($img = null)
{
if(!empty($img)) {
$exploded = explode('.', $img);
return $exploded['0'] . '_thumb.' . $exploded['1'];
}
}
function get_axis($img)
{
// Default values
$output['x_axis'] = 0;
$output['y_axis'] = 0;
// Settings
$config['height'] = 132;
$config['width'] = 176;
if ($img_dim = getimagesize($img)) {
list($thumb_width, $thumb_height) = $img_dim;
} else {
echo '<h1> ERROR HERE TOO</h1>';
return false;
}
if ($thumb_width > $config['width']) {
$output['x_axis'] = (($thumb_width - $config['width']) / 2) ;
} else if ($thumb_height > $config['height']) {
$output['y_axis'] = (($thumb_height - $config['height']) / 2);
}
return $output;
}
function resize_img($img)
{
$config = array();
echo 'Processing: '. $img .'<br/>'; // Debug
if ($img_dim = getimagesize($img)) {
list($image_width, $image_height) = $img_dim;
} else {
echo '<h1> ERROR HERE </h1>';
}
// create a thumbnail
$config['image_library'] = 'GD2';
$config['source_image'] = $img;
$config['quality'] = 100;
$config['height'] = 132;
$config['width'] = 176;
$config['create_thumb'] = TRUE;
$config['maintain_ratio']= TRUE;
$config['master_dim'] = ($image_width > $image_height) ? 'height' : 'width';
$this->image_lib->initialize($config);
if (!$this->image_lib->resize()) {
echo $this->image_lib->display_errors();
}
echo '<img src="../'.$this->image_thumb_name($img).'" /> <br/>'; // Debug
$this->image_lib->clear();
unset($config);
}
function crop_img($img)
{
$config2 = array();
// Crop that thumbnail
$config2['image_library'] = 'GD2';
$config2['quality'] = 100;
$config2['height'] = 132;
$config2['width'] = 176;
$config2['source_image'] = $this->image_thumb_name($img);
$axis = $this->get_axis($config2['source_image']);
$config2['x_axis'] = $axis['x_axis'];
$config2['y_axis'] = $axis['y_axis'];
$config2['maintain_ratio'] = FALSE;
$config2['create_thumb'] = FALSE;
$this->image_lib->initialize($config2);
if (!$this->image_lib->crop()) {
echo $this->image_lib->display_errors();
}
echo '<img src="../'.$config2['source_image'].'" /> <br/>'; // Debug
$this->image_lib->clear();
unset($config2);
}
}
答案 0 :(得分:1)
知道了! 我已将create_thumb选项设置为FALSE,并在resize_img方法中使用了new_image参数。效果相同,但未使用内置的create_tumb函数。 这是一个错误恕我直言,但它现在正在工作:)
$config['create_thumb'] = FALSE;
$config['new_image'] = $this->image_thumb_name($img);
答案 1 :(得分:0)
问题在于你的$ config ['source_image']
var_dump($config['source_image']);
看看你得到了什么。
如果文件位于根文件夹中的images文件夹中,则$ config ['source_image] ='images /'.$ img。
还要确保所有爆炸函数都返回正确的文件名。 (返回并回显检查)。
1,消除文件未找到错误。之后,看看会出现什么错误。
答案 2 :(得分:0)
您可以使用Kodem的Image Resize Service。您可以仅通过http调用来调整大小,裁剪任何图像。可以在浏览器中随意使用,也可以在生产应用中使用。