跳转到主要内容

为TinyDNG提供的Python绑定

项目描述

小型DNG加载器和写入器库

C++11中仅包含头文件的简单且有限的DNG(数字负片,TIFF格式+扩展)加载器和写入器。

目前TinyDNG仅支持无损RAW DNG和有限的无损JPEG DNG(不支持有损压缩)。

TinyDNG还可以用作TIFF RGB图像加载器(支持8位、16位和32位)。

TinyDNG加载模块正在使用LLVMFuzzer进行模糊测试,并且足够安全(不存在C++异常和assert/abort代码)。

(注意:TinyDNG仅加载DNG数据,因此您需要自己的RAW处理代码(例如debayer)来获得如上所示的已开发图像)

功能

加载

  • RAW DNG数据
  • 无损JPEG
  • ZIP压缩的DNG
    • 使用miniz或zlib
  • JPEG
    • 支持通过stb_image.h支持JPEG图像(例如缩略图)。
  • TIFF
    • 8位未压缩
    • 8位LZW压缩(无预测器,水平差预测器)
  • 实验性
    • Apple ProRAW(无损JPEG 12位)
      • 无损JPEG 12位
      • 语义图(8位标准JPEG)
    • 解码Canon RAW(CR2)
      • RAW
      • mRAW
      • sRAW
    • 解码Nikon RAW(NEF)
      • 待办事项
    • 读取自定义TIFF标记。
  • 从内存中读取DNG数据。

写入

  • DNG和TIFF
    • 无损JPEG压缩

支持的DNG文件

以下是支持的DNG文件列表。

  • Sigma sd Quattro H
    • 未压缩的RGB 12位图像。
  • iPhone DNG
  • Apple ProRAW
    • 无损JPEG 12位
    • 语义图
  • Black magic DNG
    • CinemaDNG(有损压缩)不支持。
  • Canon CR2(实验性)
  • Magic lantern DNG
  • 8位TIFF图像
    • LZW压缩8位图像。
  • 16位未压缩TIFF图像
  • 32位未压缩TIFF图像
  • OpCodeList
    • GainMap

用法

加载DNG

#include <cstdio>
#include <cstdlib>
#include <iostream>

// Define TINY_DNG_LOADER_IMPLEMENTATION and STB_IMAGE_IMPLEMENTATION in only one *.cc
#define TINY_DNG_LOADER_IMPLEMENTATION
#define STB_IMAGE_IMPLEMENTATION

// Enable ZIP compression(through miniz library)
// Please don't forget copying&adding `miniz.c` and `miniz.h` to your project.
// #define TINY_DNG_LOADER_ENABLE_ZIP

// Uncomment these two lines if you want to use system provided zlib library, not miniz
// #define TINY_DNG_LOADER_USE_SYSTEM_ZLIB
// #include <zlib.h>
#include "tiny_dng_loader.h"

int main(int argc, char **argv) {
  std::string input_filename = "colorchart.dng";

  if (argc > 1) {
    input_filename = std::string(argv[1]);
  }

  std::string warn, err;
  std::vector<tinydng::DNGImage> images;

  // List of custom field infos. This is optional and can be empty.
  std::vector<tinydng::FieldInfo> custom_field_lists;

  // Loads all images(IFD) in the DNG file to `images` array.
  // You can use `LoadDNGFromMemory` API to load DNG image from a memory.
  bool ret = tinydng::LoadDNG(input_filename.c_str(), custom_field_lists, &images, &warn, &err);


  if (!warn.empty()) {
    std::cout << "Warn: " << warn << std::endl;
  }

  if (!err.empty()) {
    std::cerr << "Err: " << err << std::endl;
  }

  if (ret) {
    for (size_t i = 0; i < images.size(); i++) {
      const tinydng::DNGImage &image = images[i];
;
      std::cout << "width = " << image.width << std::endl;
      std::cout << "height = " << image.height << std::endl;
      std::cout << "bits per piexl = " << image.bits_per_sample << std::endl;
      std::cout << "bits per piexl(original) = " << image.bits_per_sample_original << std::endl;
      std::cout << "samples per pixel = " << image.samples_per_pixel << std::endl;

    }
  }

  return EXIT_SUCCESS;
}

写入DNG(和TIFF)

请参阅examples/dngwriterhttps://github.com/storyboardcreativity/zraw-decoder以获取更多详细信息。

#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <iostream>

#define TINY_DNG_WRITER_IMPLEMENTATION
#include "tiny_dng_writer.h"

static void CreateRGBImage(tinydngwriter::DNGImage *dng_image,
                        const unsigned short basecol) {
  unsigned int image_width = 512;
  unsigned int image_height = 512;
  dng_image->SetSubfileType(false, false, false);
  dng_image->SetImageWidth(image_width);
  dng_image->SetImageLength(image_height);
  dng_image->SetRowsPerStrip(image_height);

  // SetSamplesPerPixel must be called before SetBitsPerSample()
  dng_image->SetSamplesPerPixel(3);
  uint16_t bps[3] = {16, 16, 16};
  dng_image->SetBitsPerSample(3, bps);
  dng_image->SetPlanarConfig(tinydngwriter::PLANARCONFIG_CONTIG);
  dng_image->SetCompression(tinydngwriter::COMPRESSION_NONE);
  dng_image->SetPhotometric(tinydngwriter::PHOTOMETRIC_RGB);
  dng_image->SetXResolution(1.0);
  dng_image->SetYResolution(1.2); // fractioal test
  dng_image->SetResolutionUnit(tinydngwriter::RESUNIT_NONE);
  dng_image->SetImageDescription("bora");

  std::vector<unsigned short> buf;
  buf.resize(image_width * image_height * 3);

  for (size_t y = 0; y < image_height; y++) {
    for (size_t x = 0; x < image_width; x++) {
      buf[3 * (y * image_width + x) + 0] = static_cast<unsigned short>(x % 512);
      buf[3 * (y * image_width + x) + 1] = static_cast<unsigned short>(y % 512);
      buf[3 * (y * image_width + x) + 2] = basecol;
    }
  }

  dng_image->SetImageData(reinterpret_cast<unsigned char *>(buf.data()),
                          buf.size() * sizeof(unsigned short));
}

int main(int argc, char **argv) {
  std::string output_filename = "output.dng";

  if (argc < 1) {
    std::cout << argv[0] << " <output.dng>" << std::endl;
  }

  if (argc > 1) {
    output_filename = std::string(argv[1]);
  }

  // TinyDNGWriter supports both BigEndian and LittleEndian TIFF.
  // Default = BigEndian.
  bool big_endian = false;

  if (argc > 2) {
    big_endian = bool(atoi(argv[2]));
  }

  {
    // DNGWriter supports multiple DNG images.
    // First create DNG image data, then pass it to DNGWriter with AddImage API.
    tinydngwriter::DNGImage dng_image0;
    dng_image0.SetBigEndian(big_endian);
    tinydngwriter::DNGImage dng_image1;
    dng_image1.SetBigEndian(big_endian);

    CreateRGBImage(&dng_image0, 12000);
    CreateRGBImage(&dng_image1, 42000);

    tinydngwriter::DNGWriter dng_writer(big_endian);
    bool ret = dng_writer.AddImage(&dng_image0);
    assert(ret);

    ret = dng_writer.AddImage(&dng_image1);
    assert(ret);

    std::string err;
    ret = dng_writer.WriteToFile(output_filename.c_str(), &err);

    if (!err.empty()) {
      std::cerr << err;
    }

    if (!ret) {
      return EXIT_FAILURE;
    }

    std::cout << "Wrote : " << output_filename << std::endl;
  }

  return EXIT_SUCCESS;
}

自定义

  • TINY_DNG_LOADER_USE_THREAD:启用多线程加载(需要C++11)
  • TINY_DNG_LOADER_ENABLE_ZIP:启用解码AdobeDeflate图像(目前仅限于瓦片RGB图像)。
    • TINY_DNG_LOADER_USE_SYSTEM_ZLIB:使用系统zlib库代替miniz。
  • TINY_DNG_LOADER_DEBUG:启用调试printf(仅限开发者!)
  • TINY_DNG_LOADER_NO_STB_IMAGE_INCLUDE:在tiny_dng_loader.h内部不包含stb_image.h
  • TINY_DNG_LOADER_NO_STDIO:禁用printf、cout/cerr。

示例

Python绑定(实验性)

$ python -m pip install tinydng

支持Windows(包括ARM)、Linux(包括aarch64)和macOS。

请参阅experimental/python以获取示例Python代码。

命令行工具(实验性)

当从pip安装TinyDNG时,CLI命令tinydng可用。

$ tinydng input.dng

模糊测试

资源

以下是关于如何解码RAW文件以及如何开发RAW图像的杰出文章列表。

待办事项

  • 移至C++11。
    • 删除C++03支持。
  • 解析Apple ProRAW中的语义映射标记。
  • 添加仅加载DNG头部的模式
  • 解析更多DNG头
  • 解析更多自定义DNG(TIFF)标记
  • 有损DNG
  • 改进DNG编写器
    • 支持压缩(LJPEG)
  • 支持大TIFF(4GB+)
  • 解码Nikon RAW(NEF)
  • 改进Canon RAW解码
  • 优化无损JPEG解码
  • 延迟加载瓦片图像。

许可证

TinyDNG采用MIT许可证。

TinyDNG使用了以下第三方库。

  • liblj92(无损JPEG库): (c) Andrew Baldwin 2014. MIT许可证。 https://bitbucket.org/baldand/mlrawviewer.git
  • stb_image:公共领域图像加载器。
  • lzw.hpp:作者:Guilherme R. Lampert。公共领域LZW解码器。
  • miniz:版权所有 2013-2014 RAD Game Tools和Valve Software。版权所有 2010-2014 Rich Geldreich和Tenacious Software LLC MIT许可证。请参阅miniz.LICENSE

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分布

tinydng-0.1.0.tar.gz (7.0 MB 查看哈希值)

上传时间 源代码

构建版本

tinydng-0.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (201.0 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (200.9 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (200.2 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (200.7 kB 查看哈希值)

上传时间 PyPy manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-cp312-cp312-win_arm64.whl (141.0 kB 查看哈希值)

上传时间 CPython 3.12 Windows ARM64

tinydng-0.1.0-cp312-cp312-win_amd64.whl (149.6 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86-64

tinydng-0.1.0-cp312-cp312-win32.whl (130.9 kB 查看哈希值)

上传时间 CPython 3.12 Windows x86

tinydng-0.1.0-cp312-cp312-musllinux_1_1_x86_64.whl (743.9 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ x86-64

tinydng-0.1.0-cp312-cp312-musllinux_1_1_i686.whl (797.0 kB 查看哈希值)

上传时间 CPython 3.12 musllinux: musl 1.1+ i686

tinydng-0.1.0-cp312-cp312-musllinux_1_1_aarch64.whl (727.6 kB 查看哈希值)

上传于 CPython 3.12 musllinux: musl 1.1+ ARM64

tinydng-0.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (235.0 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

tinydng-0.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (249.9 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ i686

tinydng-0.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (229.7 kB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (185.2 kB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

tinydng-0.1.0-cp312-cp312-macosx_10_9_x86_64.whl (200.8 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ x86-64

tinydng-0.1.0-cp312-cp312-macosx_10_9_universal2.whl (380.4 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.9+ universal2 (ARM64, x86-64)

tinydng-0.1.0-cp311-cp311-win_arm64.whl (143.1 kB 查看哈希值)

上传于 CPython 3.11 Windows ARM64

tinydng-0.1.0-cp311-cp311-win_amd64.whl (150.4 kB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

tinydng-0.1.0-cp311-cp311-win32.whl (132.0 kB 查看哈希值)

上传于 CPython 3.11 Windows x86

tinydng-0.1.0-cp311-cp311-musllinux_1_1_x86_64.whl (744.2 kB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.1+ x86-64

tinydng-0.1.0-cp311-cp311-musllinux_1_1_i686.whl (798.3 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ i686

tinydng-0.1.0-cp311-cp311-musllinux_1_1_aarch64.whl (728.3 kB 查看哈希值)

上传时间 CPython 3.11 musllinux: musl 1.1+ ARM64

tinydng-0.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (234.4 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64

tinydng-0.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (249.3 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ i686

tinydng-0.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (229.6 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (187.5 kB 查看哈希值)

上传时间 CPython 3.11 macOS 11.0+ ARM64

tinydng-0.1.0-cp311-cp311-macosx_10_9_x86_64.whl (202.6 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ x86-64

tinydng-0.1.0-cp311-cp311-macosx_10_9_universal2.whl (384.4 kB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ universal2 (ARM64, x86-64)

tinydng-0.1.0-cp310-cp310-win_arm64.whl (142.3 kB 查看哈希值)

上传时间 CPython 3.10 Windows ARM64

tinydng-0.1.0-cp310-cp310-win_amd64.whl (149.2 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

tinydng-0.1.0-cp310-cp310-win32.whl (131.1 kB 查看哈希值)

上传于 CPython 3.10 Windows x86

tinydng-0.1.0-cp310-cp310-musllinux_1_1_x86_64.whl (742.7 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ x86-64

tinydng-0.1.0-cp310-cp310-musllinux_1_1_i686.whl (796.5 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ i686

tinydng-0.1.0-cp310-cp310-musllinux_1_1_aarch64.whl (727.1 kB 查看哈希值)

上传于 CPython 3.10 musllinux: musl 1.1+ ARM64

tinydng-0.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (233.0 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

tinydng-0.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (248.2 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ i686

tinydng-0.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (227.8 kB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-cp310-cp310-macosx_11_0_arm64.whl (186.1 kB 查看哈希值)

上传于 CPython 3.10 macOS 11.0+ ARM64

tinydng-0.1.0-cp310-cp310-macosx_10_9_x86_64.whl (201.2 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ x86-64

tinydng-0.1.0-cp310-cp310-macosx_10_9_universal2.whl (381.5 kB 查看哈希值)

上传于 CPython 3.10 macOS 10.9+ universal2 (ARM64, x86-64)

tinydng-0.1.0-cp39-cp39-win_arm64.whl (141.0 kB 查看哈希值)

上传于 CPython 3.9 Windows ARM64

tinydng-0.1.0-cp39-cp39-win_amd64.whl (149.2 kB 查看哈希值)

上传于 CPython 3.9 Windows x86-64

tinydng-0.1.0-cp39-cp39-win32.whl (131.1 kB 查看哈希值)

上传于 CPython 3.9 Windows x86

tinydng-0.1.0-cp39-cp39-musllinux_1_1_x86_64.whl (742.9 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ x86-64

tinydng-0.1.0-cp39-cp39-musllinux_1_1_i686.whl (796.4 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ i686

tinydng-0.1.0-cp39-cp39-musllinux_1_1_aarch64.whl (727.4 kB 查看哈希值)

上传于 CPython 3.9 musllinux: musl 1.1+ ARM64

tinydng-0.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (233.1 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ x86-64

tinydng-0.1.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (248.4 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ i686

tinydng-0.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (228.1 kB 查看哈希值)

上传于 CPython 3.9 manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-cp39-cp39-macosx_11_0_arm64.whl (186.3 kB 查看哈希值)

上传于 CPython 3.9 macOS 11.0+ ARM64

tinydng-0.1.0-cp39-cp39-macosx_10_9_x86_64.whl (201.4 kB 查看哈希值)

上传于 CPython 3.9 macOS 10.9+ x86-64

tinydng-0.1.0-cp39-cp39-macosx_10_9_universal2.whl (381.8 kB 查看哈希值)

上传时间 CPython 3.9 macOS 10.9+ universal2 (ARM64, x86-64)

tinydng-0.1.0-cp38-cp38-win_amd64.whl (149.1 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

tinydng-0.1.0-cp38-cp38-win32.whl (130.9 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86

tinydng-0.1.0-cp38-cp38-musllinux_1_1_x86_64.whl (742.7 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.1+ x86-64

tinydng-0.1.0-cp38-cp38-musllinux_1_1_i686.whl (796.1 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.1+ i686

tinydng-0.1.0-cp38-cp38-musllinux_1_1_aarch64.whl (726.9 kB 查看哈希值)

上传时间 CPython 3.8 musllinux: musl 1.1+ ARM64

tinydng-0.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (232.6 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64

tinydng-0.1.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (248.1 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ i686

tinydng-0.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (227.5 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-cp38-cp38-macosx_11_0_arm64.whl (186.0 kB 查看哈希值)

上传时间 CPython 3.8 macOS 11.0+ ARM64

tinydng-0.1.0-cp38-cp38-macosx_10_9_x86_64.whl (201.1 kB 查看哈希值)

上传时间 CPython 3.8 macOS 10.9+ x86-64

tinydng-0.1.0-cp38-cp38-macosx_10_9_universal2.whl (381.3 kB 查看哈希值)

上传时间 CPython 3.8 macOS 10.9+ universal2 (ARM64, x86-64)

tinydng-0.1.0-cp37-cp37m-win_amd64.whl (149.8 kB 查看哈希值)

上传时间 CPython 3.7m Windows x86-64

tinydng-0.1.0-cp37-cp37m-win32.whl (132.1 kB 查看哈希值)

上传时间 CPython 3.7m Windows x86

tinydng-0.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl (746.3 kB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ x86-64

tinydng-0.1.0-cp37-cp37m-musllinux_1_1_i686.whl (799.0 kB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ i686

tinydng-0.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl (731.3 kB 查看哈希值)

上传时间 CPython 3.7m musllinux: musl 1.1+ ARM64

tinydng-0.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (236.6 kB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ x86-64

tinydng-0.1.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl (251.2 kB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ i686

tinydng-0.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (232.5 kB 查看哈希值)

上传时间 CPython 3.7m manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-cp37-cp37m-macosx_10_9_x86_64.whl (200.6 kB 查看哈希值)

上传时间 CPython 3.7m macOS 10.9+ x86-64

tinydng-0.1.0-cp36-cp36m-win_amd64.whl (159.5 kB 查看哈希值)

上传时间 CPython 3.6m Windows x86-64

tinydng-0.1.0-cp36-cp36m-win32.whl (139.3 kB 查看哈希值)

上传时间 CPython 3.6m Windows x86

tinydng-0.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl (745.9 kB 查看哈希值)

上传时间 CPython 3.6m musllinux: musl 1.1+ x86-64

tinydng-0.1.0-cp36-cp36m-musllinux_1_1_i686.whl (798.5 kB 查看哈希值)

上传时间 CPython 3.6m musllinux: musl 1.1+ i686

tinydng-0.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl (731.0 kB 查看哈希值)

上传时间 CPython 3.6m musllinux: musl 1.1+ ARM64

tinydng-0.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (236.5 kB 查看哈希值)

上传时间 CPython 3.6m manylinux: glibc 2.17+ x86-64

tinydng-0.1.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl (250.9 kB 查看哈希值)

上传时间 CPython 3.6m manylinux: glibc 2.17+ i686

tinydng-0.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (232.1 kB 查看哈希值)

上传时间 CPython 3.6m manylinux: glibc 2.17+ ARM64

tinydng-0.1.0-cp36-cp36m-macosx_10_9_x86_64.whl (200.3 kB 查看哈希值)

上传时间 CPython 3.6m macOS 10.9+ x86-64

由支持