我正在使用Codeigniter的图像处理库将上传的图像重新调整为三种尺寸,小尺寸,普通尺寸和大尺寸。
重新调整尺寸非常有效。但是,如果我正在调整垂直图像的大小,则库正在旋转图像,使其处于水平状态。
这些是我的配置设置:
$this->resize_config['image_library'] = 'gd2';
$this->resize_config['source_image'] = $this->file_data['full_path'];
$this->resize_config['maintain_ratio'] = TRUE;
// These change based on the type (small, normal, large)
$this->resize_config['new_image'] = './uploads/large/'.$this->new_file_name.'.jpg';
$this->resize_config['width'] = 432;
$this->resize_config['height'] = 288;
我没有设置master_dim属性,因为默认设置为auto,这就是我想要的。
我的假设是库将采用垂直图像,看到高度大于宽度并适当地平移高度/宽度配置,以使图像保持垂直。
正在发生的事情(显然)是图书馆在垂直方向上旋转图像并按照配置调整大小。
这是我必须进行实际重新调整大小的代码:
log_message('debug', 'attempting '.$size.' photo resize');
$this->CI->load->library('image_lib');
$this->CI->image_lib->initialize($this->resize_config);
if ($this->CI->image_lib->resize())
{
$return_value = TRUE;
log_message('debug', $size.' photo resize successful');
}
else
{
$this->errors[] = $this->CI->image_lib->display_errors();
log_message('debug', $size.' photo resize failed');
}
$this->CI->image_lib->clear();
return $return_value;
编辑
我认为问题可能来自上传库。当我从上传中获取image_height和image_width时,即使我上传了垂直图像,宽度也似乎更大。
这是我用来上传照片的代码的一部分:
$this->upload_config['allowed_types'] = 'jpg|jpeg';
$this->upload_config['max_size'] = '2000';
$this->upload_config['max_width'] = '0';
$this->upload_config['max_height'] = '0';
$this->upload_config['upload_path'] = './uploads/working/';
$this->CI->load->library('upload', $this->upload_config);
if ($this->CI->upload->do_upload($this->posted_file))
{
$this->file_data = $this->CI->upload->data();
$return_value = TRUE;
log_message('debug', 'upload successful');
}
我添加了一些日志来检查值:
$this->is_vertical = $this->file_data['image_height'] > $this->file_data['image_width'];
log_message('debug', 'image height:'.$this->file_data['image_height']);
log_message('debug', 'image width:'.$this->file_data['image_width']);
if ($this->is_vertical)
{
$this->resize_config['master_dim'] = 'height';
}
else
{
$this->resize_config['master_dim'] = 'width';
}
log_message('debug', 'master_dim setting:'.$this->resize_config['master_dim']);
这些是日志的结果:
DEBUG - 2010-03-16 18:35:06 - >图像高度:1536 DEBUG - 2010-03-16 18:35:06 - >图像宽度:2048 DEBUG - 2010-03-16 18:35:06 - > master_dim设置:宽度
观看Photoshop中的图像,这些是尺寸:
身高:2048 宽度:1536
任何人都知道可能导致上传库执行此操作的原因是什么?
答案 0 :(得分:1)
我从未使用过这个库,但是在阅读完文档后,我想知道master_dim属性是否有帮助。如果您将此设置为垂直图像的“高度”,可能会使它们正确向上。您可以通过条件解析每个图像,以查看图像是否垂直对齐,然后只在需要时才设置此属性。 我的另一个想法是关于maintain_ratio属性。文档说,如果设置为“TRUE”,它将调整为尽可能接近目标值,同时保持纵横比。我想知道它是否认为旋转图像可以更准确地保留这个比例?作为实验,请尝试为垂直图像将此值设置为“FALSE”。
答案 1 :(得分:0)
好的 - 我决定不相信photoshop并打开我在快速和野生动物园测试的图像。我发现它们实际上仍然是水平的。
所以Codeigniter的运作与预期完全一致。
我回到了photoshop,在测试图像上进行了网络保存,重新上传它们并按预期工作。
然后我删除了我添加的额外代码,以测试图像是否是垂直的,并且库的工作方式与我预期的一样。
现在 - 我需要弄清楚如何防止最终用户做这件事。
感谢您抽出宝贵时间回答我的问题musoNic80。希望其他人可以从我的错误中吸取教训。