Я использую codeIgniter и хочу создать динамический текст на изображении, все работает нормально, но я запутался, как сделать текстовое поле для текста на изображении и как конвертировать это изображение в реальное изображение, вот мой код.
public function convertimage()
{
ob_start();
$font = realpath(APPPATH . '../assets/fonts/OpenSans-Regular.ttf');
$string = 'here is my text for image';
$image = imageCreateFromJpeg(base_url('assets/images/winer.jpg'));
$white = imagecolorallocate($image, 255, 255, 255);
imagettftext($image, 20, 0, 400, 160, $white, $font, $string);
imagejpeg($image,NULL,100);
$rawImageBytes = ob_get_clean();
echo "<img class='img-responsive' src='data:image/jpeg;base64," . base64_encode( $rawImageBytes ) . "' />";
imagedestroy($image);
}
Я хочу преобразовать это изображение в реальное изображение.
<img class='img-responsive' src='data:image/jpeg;base64," . base64_encode( $rawImageBytes ) . "' />
Чтобы сохранить изображение в кодировке base64 в файл на основе изображения, вы можете использовать что-то вроде этого (на случай, если вы имели в виду это «преобразовать в реальное изображение»):
$base64stream = 'data:image/png;base64,iVBORw0K...';
$imgPath = '/your/image/path/including/name.png';
list($type, $base64stream) = explode(';', $base64stream);
list($base, $base64stream) = explode(',', $base64stream);
$data = base64_decode($base64stream);
file_put_contents($imgPath, $data);
Редактировать: я никогда не пытался, но быстрый поиск что-то вроде этого может сделать волшебство:
function wrap($fontSize, $angle, $fontFace, $string, $width){
$ret = "";
$arr = explode(' ', $string);
foreach ( $arr as $word ){
$teststring = $ret.' '.$word;
$testbox = imagettfbbox($fontSize, $angle, $fontFace, $teststring);
if ( $testbox[2] > $width ){
$ret.=($ret==""?"":"\n").$word;
} else {
$ret.=($ret==""?"":' ').$word;
}
}
return $ret;
}
Других решений пока нет …