标签: compression

如何压缩TypedArrays/ArrayBuffers进行存储和传输

我们开始通过画布的 ImageData 对象使用图像来方便地存储 TypedArrays。但由于预乘而失败......将我们限制为 24 位数据。我们对此一瘸一拐,但希望有一个 32 位解决方案。

我们想要转换为使用任何 TypedArray 或其 ArrayBuffer。但这些都缺乏压缩。

有什么有趣的方法来压缩它们吗?LZMA-JSJS压缩?弄清楚如何制作非预乘 png?其他?

compression storage transmission typed-arrays

1
推荐指数
1
解决办法
3363
查看次数

在 .htaccess 文件中启用 gzip 压缩

我正在尝试根据 Google pagespeed 建议启用 Gzip 压缩,以了解如何让我的网站加载速度更快。

我已尝试在https://varvy.com/pagespeed/enable-compression.html上找到的 .htaccess 文件中添加建议内容,但它无法正常工作。

我当前的 .htaccess 文件包含以下代码。重写规则可以正常工作,各种文件类型的缓存也可以正常工作。我没有使用 .htaccess 文件的经验,所以如果我犯了一个明显的错误,请原谅。我尝试阅读该问题,但似乎找不到我需要的答案。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.co.uk [NC]
RewriteRule ^(.*)$ http://www.example.co.uk/$1 [L,R=301]

## EXPIRES CACHING ##
 <IfModule mod_expires.c>
 ExpiresActive On
 ExpiresByType image/png "access 1 month"
 ExpiresByType text/css "access 1 month"
 ExpiresByType text/html "access 1 month"
 ExpiresByType text/x-javascript "access 1 month"
 ExpiresByType image/x-icon "access 1 month"
 ExpiresByType application/x-font-woff "access 1 month"
 ExpiresDefault "access 1 month"
 </IfModule>
 ## EXPIRES CACHING ##

<IfModule mod_headers.c>
  <FilesMatch "\.(js|css|xml|gz|html|htm)$">
    Header append Vary: Accept-Encoding …
Run Code Online (Sandbox Code Playgroud)

compression .htaccess gzip

1
推荐指数
1
解决办法
3556
查看次数

如何使用 GZipStream 在内存中解压缩 gz 文件?

我可能在这里做了一些明显愚蠢的事情。请指出!

我有一些 C# 代码,可以从 SFTP 中提取一堆 .gz 文件(使用SSH.NET Nuget 包- 效果很好!)。每个 gz 内部只包含一个 .CSV 文件。我想将这些文件保留在内存中而不访问磁盘(是的,我知道,存在服务器内存管理问题 - 这很好,因为这些文件相当小),在内存中解压缩它们以提取其中的 CSV 文件,然后返回一组自定义 DTO 中的 CSV 文件 ( FtpFile)。

我的问题是,虽然来自 SFTP 连接的 MemoryStream 中有数据,但它似乎从未填充到我的 GZipStream 中,或者从 GZipStream 到输出 MemoryStream 的复制失败。我尝试过使用自己的缓冲区对 Read 进行更传统的循环,但它的结果与此代码相同。

除了连接详细信息(它连接成功,所以不用担心),这是我的所有代码:

逻辑

    public static List<FtpFile> Foo()
    {
        var connectionInfo = new ConnectionInfo("example.com",
            "username",
            new PasswordAuthenticationMethod("username", "password"));
        using (var client = new SftpClient(connectionInfo))
        {
            client.Connect();

            var searchResults = client.ListDirectory("/testdir")
                .Where(obj => obj.IsRegularFile
                              && obj.Name.ToLowerInvariant().StartsWith("test_")
                              && obj.Name.ToLowerInvariant().EndsWith(".gz"))
                .Take(2)
                .ToList();

            var …
Run Code Online (Sandbox Code Playgroud)

c# compression gzip gzipstream

1
推荐指数
1
解决办法
3554
查看次数

mysql 上 BLOB 的透明压缩

我正在 mysql/mariadb 中创建一个带有 BLOB 列(innoDB)的表。BLOB 列是否透明压缩?COMPRESS(..)或者我是否必须使用 , 手动压缩/解压缩数据UNCOMPRESS(..)

(据我所知postresql对BLOB列有透明压缩)

mysql compression mariadb

1
推荐指数
1
解决办法
2949
查看次数

算术编码 FPAQ0(简单的 0 阶算术文件压缩器)

我试图理解 fpaq0 aritmetic 压缩器的代码,但我无法完全理解它。这是代码的链接 - fpaq0.cpp

我无法准确理解 ct[512]['2] 和 cxt 是如何工作的。而且我也不太清楚解码器是如何工作的。为什么在编码每个字符之前调用 e.encode(0) 。

笔记; 我已经理解了链接中提出的算术编码器-数据压缩与算术编码

  void update(int y) {
if (++ct[cxt][y] > 65534) {
  ct[cxt][0] >>= 1;
  ct[cxt][1] >>= 1;
}
if ((cxt+=cxt+y) >= 512)
  cxt=1;
}
   // Assume a stationary order 0 stream of 9-bit symbols
int p() const {
 return 4096*(ct[cxt][1]+1)/(ct[cxt][0]+ct[cxt][1]+2);
}
inline void Encoder::encode(int y) {

// Update the range
const U32 xmid = x1 + ((x2-x1) >> 12) * predictor.p();
assert(xmid >= x1 && xmid …
Run Code Online (Sandbox Code Playgroud)

c++ compression

1
推荐指数
1
解决办法
507
查看次数

哪种算法最适合大文本压缩?

目前,我正在寻找一种适用于大量文本的无损压缩算法,该算法将通过 AES 进一步加密并用作隐写术中的有效负载。

编辑:

基于文本压缩算法的比较研究,似乎在统计压缩技术中优选算术编码,而在字典压缩技术中建议使用LZB。

所以现在我想知道在压缩率和易于实现方面,统计压缩还是字典压缩更适合大型英文文本压缩。

我已经搜索过了,但仍然几乎不知道合适的算法。非常感谢您抽出时间来回答。祝你今天过得愉快。:)

compression

1
推荐指数
1
解决办法
4646
查看次数

如何压缩React Native Expo刚刚拍摄的图片

我正在使用 expo 和 MediaLibrary 中的相机组件来保存拍摄的照片。我的问题是,当使用图库中的 MediaLibrary 保存该图像时,如何压缩该图像?我正在尝试压缩它,因为稍后我还将将该图像上传到 Firebase 存储。到目前为止,这是我现在没有压缩的代码:

import React, { useState, useEffect} from 'react';
import { Text, View, TouchableOpacity } from 'react-native';
import { Camera } from 'expo-camera';
import * as MediaLibrary from 'expo-media-library';
import { Dimensions } from 'react-native';
const {height, width} = Dimensions.get('window');

export default function App() {

  const [hasPermission, setHasPermission] = useState(null);
  const [cameraRef, setCameraRef] = useState(null)
  const [type, setType] = useState(Camera.Constants.Type.back);
  useEffect(() => {
    (async () => {
      const { status } = await …
Run Code Online (Sandbox Code Playgroud)

compression camera media-library react-native expo

1
推荐指数
1
解决办法
1万
查看次数

在 C# 中解压缩 SQL Server 压缩的 varbinary 数组

我在 SQL Server 中有一个表,varbinary(MAX)其中有一列填充了Compress带有 utf8 字符的 JSON 字符串的 SQL 方法,例如{"id": 12, title: "\xd9\x81\xd8\xb1\xd9\x88\xd8\xb4"}在我使用的 sql 中CAST(DECOMPRESS(data) AS NVARCHAR(MAX)),结果正常。

\n

在 C# 中,我使用以下代码来解压缩数据列:

\n
public static string Unzip(byte[] bytes)\n{\n    using (var msi = new MemoryStream(bytes))\n    using (var mso = new MemoryStream())\n    {\n        using (var gs = new GZipStream(msi, CompressionMode.Decompress))\n        {\n            CopyTo(gs, mso);\n        }\n        return Encoding.UTF8.GetString(mso.ToArray());\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

但结果是一个无效的字符串:

\n

在此输入图像描述

\n

c# sql-server compression gzip

1
推荐指数
1
解决办法
3303
查看次数

Python 多处理并行写入单个 gzip

我正在尝试使用 python 将一个大的压缩文件(.gz)复制到另一个压缩文件(.gz)。我将对代码示例中不存在的数据执行中间处理。我希望能够使用带有锁的多处理来从多个进程并行写入新的 gzip,但我在输出 gz 文件上收到无效格式错误。

我认为这是因为锁不足以支持并行写入 gzip。由于压缩数据需要“了解”之前的数据,以便将正确的条目写入存档中,因此我认为 python 默认情况下无法处理此问题。我猜想每个进程都会保持自己对 gzip 输出的感知,并且这种状态在第一次写入后会有所不同。

如果我在不使用 gzip 的情况下打开脚本中的目标文件,那么这一切都有效。我还可以写入多个 gzip 并将它们合并,但如果可能的话更愿意避免这种情况。

这是我的源代码:

#python3.8
import gzip
from itertools import islice
from multiprocessing import Process, Queue, Lock

def reader(infile, data_queue, coordinator_queue, chunk_size):
    print("Reader Started.")
    while True:
        data_chunk = list(islice(infile, chunk_size))
        data_queue.put(data_chunk)
        coordinator_queue.put('CHUNK_READ')
        if not data_chunk:
            coordinator_queue.put('READ_DONE')
            #Process exit
            break
        
def writer(outfile, data_queue, coordinator_queue, write_lock, ID):
    print("Writer Started.")
    while True:
        queue_message = data_queue.get()
        if (queue_message == 'DONE'):
            outfile.flush() 
            coordinator_queue.put('WRITE_DONE')
            #Process exit
            break
        else:
            print("Writer",ID,"-","Write Lock:",write_lock) …
Run Code Online (Sandbox Code Playgroud)

compression gzip python-multiprocessing

1
推荐指数
1
解决办法
1669
查看次数

gzip 是否可以压缩数据而不将其全部加载到内存中,即流式传输/即时传输?

是否可以通过一定量的流来 gzip 数据,即无需立即将所有压缩数据加载到内存中?

例如,我可以在具有 2GB 内存的计算机上对一个 10GB 大小的文件进行 gzip 压缩吗?

https://docs.python.org/3/library/gzip.html#gzip.compress,该gzip.compress函数返回 gzip 的字节,因此必须全部加载到内存中。但是......尚不清楚gzip.open内部是如何工作的:压缩的字节是否会同时全部存储在内存中。gzip 格式本身是否使得实现流式 gzip 变得特别困难?

[这个问题用Python标记,但也欢迎非Python答案]

python compression gzip

1
推荐指数
2
解决办法
3275
查看次数