Classe de manipulação de imagem do Codeigniter: Redimensionar e Cortar em vários arquivos

Estou lutando para que o CodeIgniter Image Manipulation esteja funcionando corretamente. Ou é um bug ou simplesmente não estou vendo isso. Espero que alguém possa me ajudar com isso. Desde já, obrigado!

No script: Eu quero criar miniaturas (176w x 132h). As imagens de input estão em diferentes tamanhos e proporções. Para obter sempre esse tamanho, primeiro os redimensiono para ajustar a largura ou a altura máxima (dependendo da orientação da imagem) e, em seguida, recorte no centro. Eu tentei fazer tudo em um método. Isso não funcionou, então criei dois methods separados.

resize_img() 

e

 crop_img(). 

Quando eu executo o resize_img () em 3 arquivos diferentes, ele funciona. Se, depois disso, use crop_img () nestas miniaturas, o 1º método criado, funciona. Se eu combinar os dois, ou usá-los um após o outro, não. Eu tentei $ this-> image_lib-> clear () ;, desatando os arquivos de configuração. Eu até criei dois arquivos de configuração, apenas para ter certeza.

Estou ficando diferente de todos os tipos de erros do GD2, mas o problema é que depois do resize_img () cria a miniatura, o crop_img () não o cortará. Depois disso tudo vai para o sul, e as próximas imagens não podem ser abertas. As premissas de gravação são verificadas, tanto na pasta quanto nos arquivos.

Não é possível salvar a imagem. Certifique-se de que a imagem e o diretório de arquivos podem ser gravados. O caminho para a imagem não está correto. Seu servidor não suporta a function GD necessária para processar esse tipo de imagem.

Código completo:

 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 '

ERROR HERE TOO

'; 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 .'
'; // Debug if ($img_dim = getimagesize($img)) { list($image_width, $image_height) = $img_dim; } else { echo '

ERROR HERE

'; } // 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 'image_thumb_name($img).'" />
'; // 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 '
'; // Debug $this->image_lib->clear(); unset($config2); } }

    Consegui! Eu configurei a opção create_thumb para FALSE e usei o parâmetro new_image no método resize_img. O efeito é o mesmo, mas a function built-in create_tumb não está sendo usada. É um erro IMHO, mas está funcionando agora 🙂

     $config['create_thumb'] = FALSE; $config['new_image'] = $this->image_thumb_name($img); 

    O problema é com o seu $ config [‘source_image’]

     var_dump($config['source_image']); 

    veja o que você obtém.

    Se o arquivo estiver na pasta de imagens na pasta raiz, o $ config [‘source_image] =’ images /’.$ img.

    Certifique-se também de que todas as funções de explosão retornem o nome de arquivo correto. (retorno e eco para verificar).

    Primeiro, elimine o erro do arquivo não encontrado. Depois disso, veja o erro.