Python을 사용한 Base64 인코딩 및 디코딩
네트워크를 통해 전송하려는 바이너리 이미지 파일이 있다고 가정해 보겠습니다. 상대방이 파일을 제대로 받지 못했다는 사실에 놀랐습니다. 파일에 이상한 문자가 포함되어 있습니다!
흠, 파일을 원시 비트 및 바이트 형식으로 보내려고 하시는 것 같은데, 사용 중인 미디어는 스트리밍 텍스트용으로 설계되었습니다.
이러한 문제를 방지하는 솔루션은 무엇입니까? 대답은 Base64 인코딩입니다. 이번 글에서는 Python을 사용하여 바이너리 이미지를 인코딩하고 디코딩하는 방법을 보여드리겠습니다. 이 프로그램은 독립 실행형 로컬 프로그램으로 설명되지만 모바일 장치에서 서버 및 기타 여러 응용 프로그램으로 인코딩된 이미지를 보내는 등 다양한 응용 프로그램에 개념을 적용할 수 있습니다.
Base64란 무엇인가요?
이 기사를 자세히 살펴보기 전에 Base64의 의미를 정의해 보겠습니다.
Base64는 8비트 바이너리 데이터를 6비트로 표현할 수 있는 형식으로 인코딩하는 방식입니다. 데이터를 채우는 데는 A-Z
、a-z
、0-9
、+
、 /
用来表示数据,其中 =
문자만 사용됩니다. 예를 들어, 이 인코딩을 사용하면 3개의 8비트 바이트가 4개의 6비트 그룹으로 변환됩니다.
Base64라는 용어는 HTTP 및 XML에서 널리 사용되며 원래 전송을 위해 이메일 첨부 파일을 인코딩하기 위해 개발된 MIME(Multi Purpose Internet Mail Extensions) 표준에서 따왔습니다.
Base64를 사용하는 이유는 무엇인가요?
Base64는 이진 데이터 표현에 매우 중요하므로 이진 데이터를 일반 텍스트처럼 보이고 작동하는 방식으로 표현할 수 있으므로 데이터베이스에 저장하거나 이메일로 보내거나 다른 응용 프로그램에서 사용하는 것이 더 안정적입니다. . XML과 같은 텍스트 기반 형식. Base64는 주로 ASCII 문자열 형식으로 데이터를 나타내는 데 사용됩니다.
이 기사의 서문에서 언급했듯이 Base64가 없으면 데이터를 읽을 수 없는 경우가 있습니다.
Base64 인코딩
Base64 인코딩은 바이너리 데이터를 제한된 64자 세트로 변환하는 프로세스입니다. 첫 번째 섹션에 표시된 대로 이 문자는 마지막 두 값에 대해 A-Z
、a-z
、0-9
、 +
和 /
(数一数,你注意到它们加起来是 64 了吗?)。该字符集被认为是最常见的字符集,被称为 MIME 的 Base64。它使用 A-Z
、a-z
和 0-9
作为前 62 个值,以及 +
和 /
입니다.
Base64로 인코딩된 데이터는 원래 데이터보다 길어지므로 위에서 언급한 것처럼 바이너리 데이터 3바이트마다 Base64로 인코딩된 데이터가 최소 4바이트 있습니다. 이는 데이터를 더 작은 문자 집합으로 압축하기 때문입니다.
아래와 같은 원본 이메일 파일의 일부를 본 적이 있습니까(보이지 않은 이메일에서 파생되었을 가능성이 높음)? 그렇다면 Base64 인코딩이 실제로 작동하는 것을 본 것입니다! (마지막에 =
가 보이면 인코딩 시 패딩에 등호를 사용하므로 Base64 인코딩임을 알 수 있습니다.)
Base64는 다음과 같이 여러 단계로 수행됩니다.
- 인코딩할 텍스트는 해당 십진수 값, 즉 해당 ASCII 값(예: a:97, b:98 등)으로 변환됩니다. 이것은 ASCII 테이블입니다.
- 위 단계에서 얻은 10진수 값을 해당하는 2진수 값(예: 97: 01100001)으로 변환합니다.
- 모든 이진수를 연결하여 큰 이진수 집합을 얻습니다.
- 이진수 묶음은 동일한 부분으로 나누어지며, 각 부분은 6비트만 포함합니다.
- 동등한 6비트 그룹은 해당하는 10진수로 변환됩니다.
- 마지막으로 해당 십진수는 Base64 값(예: 4:E)으로 변환됩니다. 다음은 십진수 값과 Base64 알파벳입니다.
Base64 디코딩
Base64 디코딩은 Base64 인코딩과 반대입니다. 즉, 이전 섹션에서 설명한 단계를 반대로 수행하여 수행됩니다.
Base64 디코딩 단계는 다음과 같이 설명할 수 있습니다.
- 문자열의 각 문자는 Base64 십진수 값으로 변경됩니다.
- 얻은 십진수 값은 이에 상응하는 이진수 값으로 변환됩니다.
- 얻은 각 이진수에서 이진수의 처음 두 자리를 자르고 6비트 세트를 결합하여 큰 이진수 문자열을 형성합니다.
- 이전 단계에서 얻은 큰 이진수 문자열을 8자리 그룹으로 나눕니다.
- 8비트 이진수는 해당하는 십진수로 변환됩니다.
- 마지막으로 얻은 10진수 값을 해당 ASCII 값으로 변환합니다.
문자열의 Base64 인코딩 및 디코딩
이면에서 무슨 일이 일어나고 있는지 이해하고 나면 모든 작동 방식을 더 쉽게 이해할 수 있습니다. 간단한 세 글자 단어 Hey
를 인코딩하고 디코딩해 보겠습니다.
먼저 단어의 각 문자를 해당하는 ASCII로 변환한 다음 해당하는 ASCII를 이진수로 변환합니다. 이는 다음과 같은 값을 제공합니다:
信 | ASCII 索引值 | 8 位二进制值 |
---|---|---|
H | 72 | 01001000 |
e | 101 | 01100101 |
y | 121 | 01111001 |
换句话说,我们可以像这样以二进制形式编写 Hey
:
01001000 01100101 01111001
总共 24 位,当转换为 6 位组时,每个位产生四个值:
010010 000110 010101 111001
在 Base64 表中,字符 A
到 Z
由值 0 到 25 表示。字符 a
到 z
由值 26 到 51 表示。数字 0
到 9
由值 52 到 61 表示。字符 +
和 /
用 62 和 63 表示。字符 =
用于在无法将位正确分为 6 组时进行填充。
我们现在将重新排列的位转换为数值,然后获取代表这些数值的字符。
6 位二进制值 | Base64 索引值 | 信 |
---|---|---|
010010 | 18 | 小 |
000110 | 6 | G |
010101 | 21 | V |
111001 | 57 | 5 |
根据我们上面的计算,字母 Hey
在 Base64 编码时将变成 SGV5
。我们可以使用以下代码测试这是否正确:
from base64 import b64encode text_binary = b'Hey' # SGV5 print(b64encode(text_binary))
整个过程反向完成,在Base64解码后得到我们的原始数据。
现在,我将快速向您展示另一个单词 Heyo
的编码,以解释编码字符串中 =
的出现。
信 | ASCII 索引值 | 8 位二进制值 |
---|---|---|
H | 72 | 01001000 |
e | 101 | 01100101 |
y | 121 | 01111001 |
o | 111 | 01101111 |
一共有32位。这将为我们提供五个不同的 6 位组,其中有两个剩余位:11
。我们用 0000
填充它们以获得 6 位组。根据上述排列将 6 位组成一组将得到以下结果:
010010 000110 010101 111001 011011 110000
重新排列的位将根据 Base64 索引值返回以下字符。
6 位二进制值 | Base64 索引值 | 信 |
---|---|---|
010010 | 18 | 小 |
000110 | 6 | G |
010101 | 21 | V |
111001 | 57 | 5 |
011011 | 27 | b |
110000 | 48 | w |
这意味着 Heyo
的 Base64 编码值为 SGV5bw==
。每个 =
代表一对 00
,我们添加它们用于填充原始位序列。
from base64 import b64encode text_binary = b'Heyo' # SGV5bw== print(b64encode(text_binary))
对图像进行 Base64 编码
现在让我们开始讨论本文的重点。在本节中,我将向您展示如何使用 Python 轻松地对图像进行 Base64 编码。
我将使用以下二进制图像。继续下载它,让我们开始使用 Python! (我假设图像的名称是 deer.gif。)

为了在Python中使用Base64,我们要做的第一件事就是导入base64模块:
导入base64
为了对图像进行编码,我们只需使用函数 base64.b64encode(s)
即可。 Python对该函数的描述如下:
使用 Base64 对类似字节的对象
s
进行编码并返回编码后的字节。
因此,我们可以执行以下操作来对图像进行 Base64 编码:
import base64 image = open('deer.gif', 'rb') #open binary file in read mode image_read = image.read() image_64_encode = base64.b64encode(image_read)
如果您想查看编码过程的输出,请键入以下内容:
打印 image_64_encode
Base64 解码图像
要使用 Python 解码图像,我们只需使用 base64.b64decode(s)
函数。 Python 提及了有关此函数的以下内容:
解码 Base64 编码的类似字节的对象或 ASCII 字符串并返回解码后的字节。
因此,为了解码我们在上一节中编码的图像,我们执行以下操作:
base64.decode(image_64_encode)
把它们放在一起
让我们将用于 Base64 编码和解码图像的程序放在一起。执行此操作的 Python 脚本应如下所示:
import base64 image = open('deer.gif', 'rb') image_read = image.read() image_64_encode = base64.b64encode(image_read) image_64_decode = base64.b64decode(image_64_encode) image_result = open('deer_decode.gif', 'wb') # create a writable image and write the decoding result image_result.write(image_64_decode)
如果您打开桌面上的 deer_decode.gif,您会发现您拥有我们在第一步中编码的原始图像 deer.gif。
正如我们从本文中看到的,Python 使执行看似复杂的任务变得非常容易。
URL 安全编码和解码
正如我在本教程前面提到的,除了常规字母数字值之外,Base64 编码还使用字符 +
和 /
。但是,这些字符在 URL 中具有特殊含义。这意味着使用这些字符的 Base64 编码值如果在 URL 内部使用,可能会导致意外行为。
此问题的一种解决方案是使用 urlsafe_base64encode()
和 urlsafe_base64decode()
函数对任何数据进行编码和解码。这些函数在编码过程中将 +
替换为 -
,将 /
替换为 _
。
下面是一个 Python 示例,显示了这种差异:
import base64 image = open('dot.jpg', 'rb') image_data = image.read() unsafe_encode = base64.b64encode(image_data) safe_encode = base64.urlsafe_b64encode(image_data) # b'/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNr.... print(unsafe_encode) # b'_9j_4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP_sABFEdWNr.... print(safe_encode)
学习Python
无论您是刚刚入门还是希望学习新技能的经验丰富的程序员,都可以通过我们完整的 Python 教程指南学习 Python。
这篇文章已根据 Nitish Kumar 的贡献进行了更新。 Nitish 是一名 Web 开发人员,拥有在各种平台上创建电子商务网站的经验。他将业余时间花在个人项目上,让他的日常生活变得更轻松,或者在晚上与朋友一起散步。
위 내용은 Python을 사용한 Base64 인코딩 및 디코딩의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PS "로드"문제는 자원 액세스 또는 처리 문제로 인한 것입니다. 하드 디스크 판독 속도는 느리거나 나쁘다 : CrystalDiskinfo를 사용하여 하드 디스크 건강을 확인하고 문제가있는 하드 디스크를 교체하십시오. 불충분 한 메모리 : 고해상도 이미지 및 복잡한 레이어 처리에 대한 PS의 요구를 충족시키기 위해 메모리 업그레이드 메모리. 그래픽 카드 드라이버는 구식 또는 손상됩니다. 운전자를 업데이트하여 PS와 그래픽 카드 간의 통신을 최적화하십시오. 파일 경로는 너무 길거나 파일 이름에는 특수 문자가 있습니다. 짧은 경로를 사용하고 특수 문자를 피하십시오. PS 자체 문제 : PS 설치 프로그램을 다시 설치하거나 수리하십시오.

부팅 할 때 "로드"에 PS가 붙어있는 여러 가지 이유로 인해 발생할 수 있습니다. 손상되거나 충돌하는 플러그인을 비활성화합니다. 손상된 구성 파일을 삭제하거나 바꾸십시오. 불충분 한 메모리를 피하기 위해 불필요한 프로그램을 닫거나 메모리를 업그레이드하십시오. 하드 드라이브 독서 속도를 높이기 위해 솔리드 스테이트 드라이브로 업그레이드하십시오. 손상된 시스템 파일 또는 설치 패키지 문제를 복구하기 위해 PS를 다시 설치합니다. 시작 오류 로그 분석의 시작 과정에서 오류 정보를 봅니다.

이 기사는 MySQL 데이터베이스의 작동을 소개합니다. 먼저 MySQLworkBench 또는 명령 줄 클라이언트와 같은 MySQL 클라이언트를 설치해야합니다. 1. MySQL-Uroot-P 명령을 사용하여 서버에 연결하고 루트 계정 암호로 로그인하십시오. 2. CreateABase를 사용하여 데이터베이스를 작성하고 데이터베이스를 선택하십시오. 3. CreateTable을 사용하여 테이블을 만들고 필드 및 데이터 유형을 정의하십시오. 4. InsertInto를 사용하여 데이터를 삽입하고 데이터를 쿼리하고 업데이트를 통해 데이터를 업데이트하고 DELETE를 통해 데이터를 삭제하십시오. 이러한 단계를 마스터하고 일반적인 문제를 처리하는 법을 배우고 데이터베이스 성능을 최적화하면 MySQL을 효율적으로 사용할 수 있습니다.

깃털 통제의 열쇠는 점진적인 성격을 이해하는 것입니다. PS 자체는 그라디언트 곡선을 직접 제어하는 옵션을 제공하지 않지만 여러 깃털, 일치하는 마스크 및 미세 선택으로 반경 및 구배 소프트를 유연하게 조정하여 자연스럽게 전이 효과를 달성 할 수 있습니다.

MySQL에는 무료 커뮤니티 버전과 유료 엔터프라이즈 버전이 있습니다. 커뮤니티 버전은 무료로 사용 및 수정할 수 있지만 지원은 제한되어 있으며 안정성이 낮은 응용 프로그램에 적합하며 기술 기능이 강합니다. Enterprise Edition은 안정적이고 신뢰할 수있는 고성능 데이터베이스가 필요하고 지원 비용을 기꺼이 지불하는 응용 프로그램에 대한 포괄적 인 상업적 지원을 제공합니다. 버전을 선택할 때 고려 된 요소에는 응용 프로그램 중요도, 예산 책정 및 기술 기술이 포함됩니다. 완벽한 옵션은없고 가장 적합한 옵션 만 있으므로 특정 상황에 따라 신중하게 선택해야합니다.

PS 카드의로드 인터페이스는 소프트웨어 자체 (파일 손상 또는 플러그인 충돌), 시스템 환경 (DIFE 드라이버 또는 시스템 파일 손상) 또는 하드웨어 (하드 디스크 손상 또는 메모리 스틱 고장)로 인해 발생할 수 있습니다. 먼저 컴퓨터 자원이 충분한 지 확인하고 배경 프로그램을 닫고 메모리 및 CPU 리소스를 릴리스하십시오. PS 설치를 수정하거나 플러그인의 호환성 문제를 확인하십시오. PS 버전을 업데이트하거나 폴백합니다. 그래픽 카드 드라이버를 확인하고 업데이트하고 시스템 파일 확인을 실행하십시오. 위의 문제를 해결하면 하드 디스크 감지 및 메모리 테스트를 시도 할 수 있습니다.

PS 페더 링은 이미지 가장자리 블러 효과로, 가장자리 영역에서 픽셀의 가중 평균에 의해 달성됩니다. 깃털 반경을 설정하면 흐림 정도를 제어 할 수 있으며 값이 클수록 흐려집니다. 반경을 유연하게 조정하면 이미지와 요구에 따라 효과를 최적화 할 수 있습니다. 예를 들어, 캐릭터 사진을 처리 할 때 더 작은 반경을 사용하여 세부 사항을 유지하고 더 큰 반경을 사용하여 예술을 처리 할 때 흐릿한 느낌을줍니다. 그러나 반경이 너무 커서 가장자리 세부 사항을 쉽게 잃을 수 있으며 너무 작아 효과는 분명하지 않습니다. 깃털 효과는 이미지 해상도의 영향을받으며 이미지 이해 및 효과 파악에 따라 조정해야합니다.

MySQL 성능 최적화는 설치 구성, 인덱싱 및 쿼리 최적화, 모니터링 및 튜닝의 세 가지 측면에서 시작해야합니다. 1. 설치 후 innodb_buffer_pool_size 매개 변수와 같은 서버 구성에 따라 my.cnf 파일을 조정해야합니다. 2. 과도한 인덱스를 피하기 위해 적절한 색인을 작성하고 Execution 명령을 사용하여 실행 계획을 분석하는 것과 같은 쿼리 문을 최적화합니다. 3. MySQL의 자체 모니터링 도구 (showprocesslist, showstatus)를 사용하여 데이터베이스 건강을 모니터링하고 정기적으로 백업 및 데이터베이스를 구성하십시오. 이러한 단계를 지속적으로 최적화함으로써 MySQL 데이터베이스의 성능을 향상시킬 수 있습니다.
