Stack Overflow en español Asked on November 4, 2021
Estoy teniendo problemas para generar una imagen desde PHP. Mi problema es que se genera el archivo perfectamente con la estructura que necesito, pero al abrir el archivo de imagen aparece el siguiente mensaje: "Parece que el formato de este archivo no es compatible." Lo estoy realizando con Laravel
Adjunto código de como genero la imagen y la guardo en la BD (el nombre de la imagen)
HTML:
<div class="col-md-5">
<div class="card-header">Firma</div>
<input type="color" class="js-color-picker color-picker">
<input type="range" class="js-line-range" min="1" max="72" value="1">
<label class="js-range-value">1</label>Px
<canvas class="js-paint paint-canvas" id="canvas" name="firma" width="400" height="300"></canvas>
<input type="hidden" name="_token" id="token" value="{{ csrf_token() }}">
</div>
Controller:
public function crearPaciente(Request $request){
$nombre = $request->get('nombre');
$apellidos = $request->get('apellidos');
$dni = $request->get('dni');
$fechaNacimiento = $request->get('fechaNacimiento');
$lugarNacimiento = $request->get('lugarNacimiento');
$direccion = $request->get('direccion');
$codigoPostal = $request->get('codigoPostal');
$telefonoFijo = $request->get('telefonoFijo');
$telefonoMovil = $request->get('telefonoMovil');
$compania = $request->get('compania');
//obtenemos la fecha de firma
$fecha = CarbonCarbon::now();
$fechaFinal = $fecha->toDateString();
$firma = $request->get('dataURL');
$this->generateImage($firma, $nombre, $apellidos);
$pacienteFirma = $nombre.$apellidos.".png";
$guardarFirma = str_replace(' ', '', $pacienteFirma);
$data = array('nombre'=>$nombre,
"apellidos"=>$apellidos,
"dni"=>$dni,
"fecha_nacimiento"=>$fechaNacimiento,
"lugar_nacimiento"=>$lugarNacimiento,
"direccion"=>$direccion,
"cod_postal"=>$codigoPostal,
"tlf1"=>$telefonoFijo,
"tlf2"=>$telefonoMovil,
"compania"=>$compania,
);
$consentimiento = array('fechaFirma' => $fechaFinal,
'firma' => $guardarFirma
);
DB::table('pacientes')->insert($data);
DB::table('lopds')->insert($consentimiento);
Capturo el resquest del canvas
$firma = $request->get('dataURL');
$this->generateImage($firma, $nombre, $apellidos);
Función "generateImage"
public function generateImage($img, $nombre, $apellidos){
$cadenaNombre = $nombre.$apellidos;
$nombreApellidos = str_replace(' ', '', $cadenaNombre);
$path = "images/".$nombreApellidos.".png";
$imgTran1 = str_replace('data:image/png;base64,', '', $img);
$imgTran2 = str_replace(' ', '+', $img);
$data = base64_decode($imgTran2);
$success = file_put_contents($path, $data);
}
Tengo que decir, que antes de transformar la imagen, la cadena resultante del canvas es una cadena en base64, como se puede ver en la variable $imgTran1.
Gracias de antemano por la ayuda, ya que no se que puede estar fallando para que no se muestre la imagen. Al devolverla en html de nuevo, tampoco se muestra.
Un saludo y gracias de nuevo
La imagen convertida se ha utilizado incorrectamente, en la segunda conversion/reemplazo se utiliza la misma imagen inicial ($img
) como fuente, por lo que data:image/png;base64
queda en la imagen final. (cambia $img
por $imgTran1
)
$imgTran1 = str_replace('data:image/png;base64,', '', $img);
$imgTran2 = str_replace(' ', '+', $imgTran1);
$data = base64_decode($imgTran2);
Answered by F.Igor on November 4, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP