Размер файла изображения на разных платформах одинаков?

Размер файла изображения на разных платформах одинаков?

Моему приложению нужно знать точный размер файла (байты) файлов изображений *.png. Это работает в точности так, как и ожидалось в 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}

Он сообщает размер файла 1247, что верно. Увы, у меня нет доступа к другим операционным системам (Windows, Mac). Будет ли это работать там? Будет ли сообщаемое значение одинаковым на разных системах?

EDIT: Я имею в виду: среди тех, кто видит этот вопрос и использует Windows (MiKtex), приведенный выше код выдает то же число, что и я получаю на Linux? Оно напечатано в PDF. Должно быть то же самое, но я хочу быть уверен.

Почему я это делаю: Использование изображений ограничено. Чтобы гарантировать, что изображение «такое же, как и ранее одобренное», а не «отредактированное кем-то по ходу дела», есть несколько проверок, например, размер файла.

решение1

lfs.attributes()Системный вызов использует в stat()соответствии сего документчто должно дать идентичный результат для файлов на Linux, macOS, Windows ипо стандарту POSIXразмер — это фактический размер файла (после разрешения символической ссылки). Поэтому безопасно использовать этот метод для получения размера файла. Если вы не чувствуете, что это достаточно безопасно, можно использовать распространенную практику, используемую в lua для получения размера файла с помощью seek, см. другой ответ, который я опубликовал.

решение2

В общих ситуациях lfs.attributes()можно доверять кроссплатформенной работе. Более медленная, но гарантированно работающая альтернатива:

\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}

Изменено из: https://www.lua.org/pil/21.3.html

Связанный контент