Внимательно проверьте user_guide для библиотеки изображений, на самом деле в разделе водяных знаков, эта проблема была у меня, и я решил ее из user_guide. Ваше изображение водяного знака должно иметь хотя бы одну прозрачную точку, поэтому вы можете назначить ее какцвет, который вам нужен, чтобы он был прозрачным после публикации водяного знака, проверьте этот пример:
$image_cfg = array();
$image_cfg['image_library'] = 'GD2';
$image_cfg['source_image'] = '--HERE THE PATH TO IMAGE THAT WILL TAKE WATERMARK--';
$image_cfg['wm_overlay_path'] = '--HERE THE PATH TO THE WATERMARK IMAGE ITSELF--';
$image_cfg['new_image'] = '--HERE THE PATH TO SAVE THE NEW IMAGE AFTER WATERMARK--';
$image_cfg['wm_type'] = 'overlay';
$image_cfg['wm_opacity'] = '99';
$image_cfg['wm_x_transp'] = 200;
$image_cfg['wm_y_transp'] = 200;
$image_cfg['wm_vrt_alignment'] = 'top';
$image_cfg['wm_hor_alignment'] = 'left';
$image_cfg['create_thumb'] = FALSE;
$this->image_lib->initialize($image_cfg);
$this->image_lib->watermark();
$this->image_lib->clear();
обратите внимание на часть wm_x_transp и wm_y_transp ... эти две части назначают x и y пикселя, чтобы сделать егоЦвет прозрачный в конечном результате, по умолчанию 4,4, и я думаю, что этот пиксель в вашем случае не прозрачен, попробуйте этот ответ, и он будет работать