我有一個數據字符串超過800個字符,我試圖壓縮下來使用QR碼(我想至少50%,但可能會很高興,如果我得到它少於七個百)。以下是我正在試圖壓縮的示例串,包含841個字符:字符串比DotNetZip或LZMA有更好的壓縮庫嗎?
+hgoSuJm2ecydQj9mXXzmG6b951L2KIl0k9VGzIEtLztuWO2On9rt7DUlH0lXzG4iJ1yK0fA
97mDyclKSttIZXOxSPBf85LEN4PUUqj65aio5qwZttZSZ64wpnMFg/7Alt1R39IJvTmeYfBm
Tuc1noMMcknlydFocwI8/sk2Sje5MR/nYNX0LPkQhzyi5vFJdrndqAgXYULsYrB3TJDAwvgs
Kw9C5EJnrlqcb21zg17O2gU/C8KY0pz9RPzUl1Sb0rCP8iZCeis4YbQ5tuUppOfnO/X0Mosv
SOQJ/bF9juKW8ocnQvNjsNxGV1gPkWWtiU2Old7Qm7FLDqL6kQKrq356yifs0NiMVGdvAg32
eugewuttCugoZASYOpQdwPu1jMxVO1fzF3zEy5w6tDlcfA2DZwa+un9/k8XZWAO/KVExy68q
UtVRQxsIOKgpl/2tNw5DBAKbykKIkmizbsA2xtzqnYqld4kOdNMJh3YjlqWF9Bt8MZo7a+Q6
jgayr2rjpyIptc599DGtvp68ZNQ64TKNmiMnnyGMo3E+xW34G3RrsYnHGm+xJoLKoOJhacDu
oZke1ycJgQv+Y61WPrvtFOVBxV5rvSzO0+8px5AWN3uCrrw1RmT5N14IVhh6BOtRjsifqIB2
dAKxzBNsvbXm1SzkuyqYiMnp5ivy3m2mPwc9GLsykx0FRIkhCYO8ins9E5ot9QvVnE155MFA
8FVwsP5uNdOF4EzQS2/h2QK3zb5Yq4Nftlo605Dd5vuVN/A7CUN38DaAKBxDKgqDzydfQnZw
R0hTfMHNLgBJKNDSpz2P6almGlUJtXT6IYmzuU2Iaion8ePG
我已經嘗試了以下三個庫:
- 內置.NET GzipStream
- DotNetZip,其中,
- GzipStream
- DeflateStream
- 的LZMA SDK 7-ZIP
我遇到一個問題,即壓縮實際進行串長。我的理解是DeflateStream的開銷最小,但它仍然在添加字符。使用DotNetZip,我告訴它使用最大壓縮:
Imports Ionic.Zlib
Shared Function CompressData(data As Byte()) As Array
Dim msCompressed As MemoryStream = New MemoryStream
' I'm not sure if the last parameter on this next function should be
' true (for LeaveOpen), but it doesn't seem to affect it either way.
Dim deflated As DeflateStream = New DeflateStream(msCompressed, _
CompressionMode.Compress, CompressionLevel.BestCompression, True)
' Write data to compression stream (which is linked to the memorystream)
deflated.Write(data, 0, data.Length)
deflated.Flush()
deflated.Close()
Return msCompressed.ToArray
End Function
我只是在想這會變得更糟,因爲我將不得不甚至更多數據。有這個長度的字符串有更好的壓縮算法嗎?壓縮通常只能在較長的字符串上工作嗎?不幸的是,數據是這樣的,我不能使用替代字符作爲數據片段。
此外,我能夠使用字母數字編碼的QR碼,或者我必須使用二進制?根據http://www.qrme.co.uk/qr-code-forum.html?func=view&catid=3&id=324,我不認爲我可以,但我想確定一下。
感謝您的幫助!
我認爲你正在做的是轉換二進制 - >字符串 - >壓縮 - >字符串QR。您應該跳過第一個字符串轉換部分。 – LostInComputer
我嘗試刪除第一個字符串轉換,但我沒有看到任何更改。也就是說,我用原始數據創建了一個字符串。這些數據被傳遞給一個子程序,並以字節數組的形式返回。然後將這個字節數組傳遞給壓縮算法,該算法也返回一個字節數組。我現在將壓縮的字節數組和未壓縮的字節數組轉換爲字符串來比較長度。無論哪個字符串較短,都會傳遞給QR碼庫,因爲它需要一個字符串進行編碼。感謝您的建議! –