Licencias de código abierto
Última actualización: 26 de septiembre de 2026
La conversión de una foto HEIC aquí ocurre dentro de tu propio navegador, y tu foto no se sube para ello. Para hacer eso, tu navegador descarga un pequeño programa de código abierto que lee HEIC. Esta página proporciona su licencia, dónde está su código fuente y cómo puedes reconstruirlo o reemplazarlo.
En resumen: el decodificador está licenciado bajo la LGPL-3.0, no lo modificamos, puedes descargar el código fuente del que creemos que fue construido, desde este sitio (más abajo indicamos lo que hemos verificado y lo que no), y eres libre de modificarlo, reemplazarlo y realizar ingeniería inversa para tu propio uso.
Lo que enviamos a tu navegador
- libheif-js 1.23.2: una compilación de Emscripten (WebAssembly) de libheif 1.23.2, con el libde265 decodificador HEVC 1.0.15 incluido. Licencia de libheif, libde265 y del 'wrapper' libheif-js: Licencia Pública General Reducida de GNU v3.0 (LGPL-3.0). Copyright struktur AG, Dirk Farin y los colaboradores de libheif / libde265; 'wrapper' libheif-js por Kiril Vatev y colaboradores.
- Los archivos fueron construidos con Emscripten 3.1.61 y pueden contener código de tiempo de ejecución de Emscripten y partes de la biblioteca C musl. Esas partes no son LGPL: están bajo las licencias MIT / NCSA, reproducidas en EMSCRIPTEN-NOTICE.txt. Esta lista proviene del script de compilación y de las cadenas en el binario, no de una auditoría completa del archivo compilado.
- Nuestros propios archivos pequeños, /heic-worker.js y /heic-decode.js, son JavaScript simple y legible (no minificado). Llaman a la biblioteca; no la contienen.
Archivos y textos de licencia
La biblioteca se entrega como archivos separados, exactamente como sus autores los publicaron en el paquete npm (no cambiamos nada, y los archivos no se fusionan con ningún otro script):
- /vendor/libheif-js/libheif.js (código 'glue' de JavaScript) y /vendor/libheif-js/libheif.wasm (el decodificador)
- /vendor/libheif-js/LICENSE.txt: los textos completos de LGPL-3.0 y GPL-3.0 tal como se distribuyen con libheif
- /vendor/libheif-js/LICENSE-libheif-js-wrapper.txt: el texto LGPL-3.0 distribuido con el paquete libheif-js
- /vendor/libheif-js/EMSCRIPTEN-NOTICE.txt: textos de licencia MIT / NCSA / musl para las partes del tiempo de ejecución de Emscripten
- /vendor/libheif-js/SOURCE.txt: versiones, sumas de verificación, enlaces a las fuentes, instrucciones de compilación y reemplazo (la misma información que a continuación)
SHA-256 de los dos binarios:
- libheif.js:
f148d9ff173e5a6d6781e80dccb8336f54bfbb032392ceb2d37e0e92923c4bf3 - libheif.wasm:
e4aa8333fbe55ec7c6c776f735236f40bed9103188498f8131d4e52b73cdfee8
Código fuente, alojado aquí
El código fuente completo correspondiente se mantiene en este sitio, para que no dependas de GitHub. GitHub no incluye submódulos en sus archivos, por lo que libheif y libde265 son archivos separados. Cada archivo a continuación es el archivo tal como GitHub lo proporciona para la etiqueta o el commit mostrado.
- libheif-js-1.23.2.tar.gz: el wrapper y el empaquetado, etiqueta
1.23.2(commit6ca00b818c0ff51cb2a5c75b9ce97d708083335a).
SHA-256a52f4570a2c479db9875fd3d082748e41ed69057c77b81bc8bac7a689feab259 - libheif-emscripten-v1.23.2.tar.gz: la receta de compilación, etiqueta
v1.23.2(commitdd5a19b878149437a5a427f6e1afa8bac624a714).
SHA-2561b1b71e8b34ccc2b9ba490d769172ad855c279efdc787d8ea7a901af177ebcab - libheif-ac1cb05c39008f01525c991ff8b88f84ddf70fd2.tar.gz: libheif 1.23.2, el submódulo que libheif-emscripten fija, commit
ac1cb05c39008f01525c991ff8b88f84ddf70fd2.
SHA-25636c9b259386f1ffb3ed12d7ca01664fde8ef03802ded750de17db53303b099e7 - libde265-1.0.15-release.tar.gz: el archivo de lanzamiento de libde265 1.0.15 que el script de compilación de libheif descarga (incluye el script
configuregenerado).
SHA-25600251986c29d34d3af7117ed05874950c875dd9292d016be29d3b3762666511d - libde265-v1.0.15.tar.gz: la misma versión como un archivo de repositorio simple, etiqueta
v1.0.15(commit17bb8d9fcea62db8cdeb0fc7ef8d15dbd19a22e4).
SHA-256d4e55706dfc5b2c5c9702940b675ce2d3e7511025c6894eaddcdbaf0b15fd3f3
Las mismas fuentes en GitHub: libheif-js (etiqueta 1.23.2), libheif-emscripten (etiqueta v1.23.2), libheif (commit ac1cb05) y libde265 (etiqueta v1.0.15). El paquete también está en npm (sha1 185691289ccfefe813e4b7f84ac4f84f24abb064). No hicimos ningún cambio a nada de esto.
Compílalo tú mismo
Estos pasos provienen del flujo de trabajo de compilación de libheif-emscripten v1.23.2 (.github/workflows/emscripten.yml, el objetivo “wasm”). Los copiamos del repositorio y no los hemos ejecutado nosotros mismos. Necesitas una máquina Ubuntu 22.04 limpia (el script de instalación ejecuta sudo apt-get e instala y elimina paquetes), Node.js 24, git, curl, cmake, make y una cadena de herramientas de C++.
git clone https://github.com/catdad-experiments/libheif-emscripten
cd libheif-emscripten
git checkout v1.23.2
git submodule update --init --recursive # libheif at ac1cb05c39008f01525c991ff8b88f84ddf70fd2
npm install -g typescript@5
export EMSCRIPTEN_VERSION=3.1.61
cd libheif
./scripts/install-ci-linux.sh # installs Emscripten 3.1.61
./scripts/prepare-ci.sh
sed -e 's/USE_WASM=0/USE_WASM=1 USE_UNSAFE_EVAL=0/g' -e 's/USE_TYPESCRIPT=0/USE_TYPESCRIPT=1/g' \
./scripts/run-ci.sh > ./scripts/run-ci-wasm.sh
chmod +x ./scripts/run-ci-wasm.sh
./scripts/run-ci-wasm.sh # also downloads and builds libde265 1.0.15
cd ..
./dist-prep.sh wasm # result: dist/libheif.js, dist/libheif.wasm
El paquete libheif-js luego ejecuta el .js archivo a través de esbuild (minificar, objetivo es2019) con su scripts/install.js; es por eso que nuestro libheif.js está minificado. SOURCE.txt explica este paso también. No se garantiza que una recompilación sea bit a bit idéntica a los archivos que distribuimos.
Reemplaza la biblioteca con tu propia versión
El convertidor carga libheif.js y libheif.wasm como dos archivos separados desde /vendor/libheif-js/, a través de /heic-worker.js. Para usar tu propia compilación, reemplaza ambos archivos, manteniendo los mismos nombres y carpeta. Tu compilación debe ofrecer la interfaz que /heic-worker.js usa:
- una función global
libheif(options)(Emscripten MODULARIZE, nombrelibheif) que aceptalocateFile,onRuntimeInitializedyonAborty devuelve el módulo;libheif.jsencuentralibheif.wasma través delocateFile new module.HeifDecoder()susdecode(bytes)(devuelve una lista de imágenes) y sudecoderpropiedad- por imagen:
is_primary(),get_width(),get_height(),has_alpha_channel(),display({data, width, height}, callback)yfree() module.heif_context_free(handle)
En la práctica: guarda la página y estos archivos, pon tu compilación en el mismo lugar y sirve esa carpeta tú mismo (por ejemplo, con python3 -m http.server), o usa la función de anulación local de tu navegador para servir tu propio archivo en la misma dirección.
Sus derechos
Puedes modificar la biblioteca para tu propio uso, y puedes aplicar ingeniería inversa para depurar esas modificaciones. Nada en este sitio o en sus términos limita eso.
Decodificador anterior
Hasta el 26 de septiembre de 2026, este sitio utilizaba la biblioteca heic2any (versión 0.0.4, licencia MIT) para archivos HEIC. Ya no se utiliza y la licencia anterior no se aplica a ella: el decodificador que incluimos ahora es libheif-js LGPL-3.0 descrito en esta página. Reemplazamos heic2any porque cambiaba el contraste y los colores de muchas fotos de teléfono y no podía leer algunos archivos HEIC más recientes.
Preguntas
Usa el botón de comentarios en cualquier página, o contáctanos a través de página de contacto.