La función GD de PHP imagettftext() debe prestar atención a la codificación de caracteres predeterminada
Autor:Eve Cole
Fecha de actualización:2009-06-07 15:15:31
Estoy desarrollando una pequeña función estos días, que es similar a una firma personalizada en un foro. Genera automáticamente una imagen con texto basada en la información de los miembros. La unión de imágenes se puede realizar utilizando funciones como imagecopy() e imagecopyresampled() Sin embargo, cuando se trata de dibujar texto, encuentro un problema. La plantilla de texto se guarda en un archivo de texto. El programa primero lee el archivo y reemplaza las variables que contiene con datos, y luego usa la función imagettftext() para dibujarlo en la imagen. Desafortunadamente, la imagen dibujada está confusa @_@. ... Así que busqué problemas relacionados en Google y descubrí que la mayoría de la gente decía que la cadena pasada en la función imagettftext() debe estar codificada en UTF-8, y el manual oficial de PHP también indica claramente "cadena codificada en UTF-8". "Se puede pasar directamente", pero el problema es que la codificación del archivo de plantilla es originalmente UTF-8, lo cual es un poco confuso. Desesperado, utilicé EmEditor para abrir el archivo de plantilla original, intenté convertirlo a diferentes codificaciones y lo comparé con el código confuso generado por GD. Resultó que cuando lo convertí a la codificación EUC-JP, en realidad coincidía con el código confuso. salida por GD... es decir, la codificación predeterminada de GD en el servidor aquí es EUC-JP, y esa es una codificación japonesa. Busqué en la configuración de php.ini y no encontré opciones relevantes, por lo que surgió otra pregunta: ¿Dónde está configurada esta codificación predeterminada? Fue el hermano de Si Wen, Niu, quien descubrió que había un parámetro "--enable-gd-jis-conv" en los parámetros de compilación de PHP que era muy sospechoso. Google descubrió que muchos problemas confusos estaban relacionados con este parámetro de compilación... Oficial. La descripción del parámetro es "GD: Habilitar compatibilidad con fuentes japonesas mapeadas JIS", lo que significa que GD admite fuentes codificadas en japonés (maldita sea, ¿por qué no hay una opción de compilación para admitir fuentes codificadas en chino? ¿PHP también discrimina? nacionalidad = =b), para decirlo sin rodeos, habilítela. Si esta opción está habilitada, GD asignará las partes mayores que 127 en la biblioteca de fuentes TTF (es decir, las partes que no pertenecen a la biblioteca de fuentes latinas estándar) de acuerdo al orden del JIS japonés, y luego, naturalmente, se volverá confuso cuando se use para mapear fuentes chinas. Sin más, elimina esta opción y vuelve a compilar, y el problema estará solucionado. Después de eliminar esta opción, la codificación predeterminada de imagettftext() pasa a ser UTF-8 y el chino se puede mostrar normalmente~