¿El tamaño del archivo de imagen multiplataforma es el mismo?

¿El tamaño del archivo de imagen multiplataforma es el mismo?

Mi aplicación necesita saber el tamaño exacto del archivo (bytes) de los archivos de imagen *.png. Esto funciona exactamente como se esperaba en Linux:

% !TeX TS-program = lualatex
% !TeX encoding = UTF-8
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}
\usepackage{mwe}
\usepackage{graphics}
\gdef\getfilesize#1{%
  \directlua{
    local filename = ("\luaescapestring{#1}")
    local foundfile = kpse.find_file(filename, "tex", true)
    if foundfile then
      local size = lfs.attributes(foundfile, "size")
      if size then
        tex.write(size)
      end
    end
  }%
}
\begin{document}
\includegraphics{example-image-4x3.png}\par
Above file size: \getfilesize{example-image-4x3.png}\par
\end{document}

Informa un tamaño de archivo 1247, lo cual es correcto. Lamentablemente, no tengo acceso a otros sistemas operativos (Windows, Mac). ¿Esto también funcionaría allí? ¿El valor informado sería el mismo en diferentes sistemas?

EDITAR: Lo que quiero decir es: entre aquellos que ven esta pregunta y usan Windows (MiKtex), ¿el código anterior informa el mismo número que obtengo en Linux? Está impreso en el PDF. Debería ser lo mismo, pero quiero estar seguro.

Por qué hago esto: El uso de imágenes es limitado. Para garantizar que una imagen sea "la misma que la aprobada previamente" en lugar de "editada por alguien en el camino", existen varias comprobaciones, como el tamaño del archivo.

Respuesta1

La llamada al sistema lfs.attributes()utiliza stat()de acuerdo consu documentolo que debería producir resultados idénticos para archivos en Linux, macOS, Windows ypor estándar POSIXel tamaño es el tamaño real del archivo (después de resolver el enlace simbólico). Por lo tanto, es seguro utilizar ese método para obtener el tamaño del archivo. Si no cree que sea lo suficientemente seguro, puede utilizar una práctica común utilizada en lua para obtener el tamaño del archivo mediante la búsqueda, consulte la otra respuesta que publiqué.

Respuesta2

En situaciones generales, lfs.attributes()se puede confiar en que funcione en varias plataformas. Una alternativa más lenta pero con garantía de funcionamiento:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Roman}
%\usepackage{mwe}
\usepackage{graphics}
\gdef\getfilesize#1{%
  \directlua{
    function fsize (file)
      local h = io.open(file)
      local size = h:seek("end")
      assert(h:close())
      return size
    end
    local filename = ("\luaescapestring{#1}")
    local foundfile = kpse.find_file(filename, "tex", true)
    if foundfile then
      local size = fsize(foundfile)
      if size then
        tex.write(size)
      end
    end
  }%
}
\begin{document}
\includegraphics{example-image-4x3.png}\par
Above file size: \getfilesize{example-image-4x3.png}\par
\end{document}

Modificado de: https://www.lua.org/pil/21.3.html

información relacionada