python如何对图片或文件的操作
一. base64 与图片的相互转换1. base64 转图片123456789101112131415161718192021importbase64fromioimportBytesIOfromPILimportImage# base64 编码的图像数据示例base64_dataiVBn9DHASKJDjDsdSADSf8lgg# 将 base64 编码的字符串解码为二进制数据binary_database64.b64decode(base64_data)# 将二进制数据转换为 BytesIO 对象bytes_ioBytesIO(binary_data)# 使用 PILPillow加载图像imageImage.open(bytes_io)# 保存图像image.save(output_image.png)print(图像保存成功)2.图片转 base641234567891011121314151617181920importbase64deffile_to_base64(file_path):withopen(file_path,rb) asfile:# 读取文件内容file_datafile.read()# 使用base64编码base64_encodedbase64.b64encode(file_data)# 将bytes对象转换为字符串base64_stringbase64_encoded.decode(utf-8)returnbase64_string# 示例将图片转换为Base64编码image_pathD:/output_image.pngbase64_datafile_to_base64(image_path)# 打印Base64编码print(base64_data)二.图片和像素点的操作1. 读取图片的像素点矩阵, 写入到 json 文件中jpg 一般为3通道, png 一般为 4通道12345678910111213141516171819202122读取图片像素点矩阵, 写入到json文件fromPILimportImageimportnumpy as npimportjson# 打开图片imgImage.open(D:/input_image.png)# 获取图片大小和格式print(img.size, img.format)# 显示图片# img.show()# 获取像素数据pixelsnp.array(img)# 将像素点转为 list 写入文件file_objectopen(D:/why.json,w, encodingutf8)json.dump(pixels.tolist(), file_object, ensure_asciiFalse)2.读取像素矩阵, 生成图片1234567891011121314151617读取像素点矩阵, 生成图片importjsonimportnumpy as npimportcv2file_objectopen(D:/why.json,r, encodingutf8)file_data_strfile_object.read()file_object.close()matrix_datajson.loads(file_data_str)imagenp.array(matrix_data, dtypenp.uint8)print(image.shape)cv2.imwrite(D:/output_image2.jpg, image)三.本地文件和二进制的互相转换1.本地文件转二进制123456789# 本地文件转二进制deffile_binary(path):withopen(path,rb) asfile:binary_datafile.read()returnbinary_datafile_pathD:/input_image.pngbinaryfile_binary(file_path)2.二进制转本地文件12345678910111213141516171819# 本地文件转二进制deffile_binary(path):withopen(path,rb) asfile:binary_datafile.read()returnbinary_data# 二进制写入到本地文件defsave_binary_file(path, binary_data):# 将二进制数据写入文件withopen(path,wb) asfile:file.write(binary_data)file_pathD:/input_image.pngbinaryfile_binary(file_path)to_file_pathD:/output_image.pngsave_binary_file(to_file_path, binary)四.计算文件的 md51.计算本地文件的 md512345678910111213141516171819202122importhashlib# 计算本地文件的 md5 值defcalculate_md5(path):# 打开图像文件withopen(path,rb) as f:# 读取图像数据binary_dataf.read()# 计算 MD5 值md5_hashhashlib.md5(binary_data)md5_valuemd5_hash.hexdigest()returnmd5_value# 图像文件路径file_pathD:/output_image.png# 获取图像的 MD5 值md5calculate_md5(file_path)print(md5)2.计算数据二进制的 md5跟计算本地文件的md5差不多, 只不过传入的是二进制数据而已, 二进制数据除了是从文件中直接读取的, 也有可能是从数据库中获取, 比如 mongo, 所以也要注意一下编码问题。12345678910111213141516171819202122232425262728importhashlib# 本地文件转二进制deffile_binary(path):withopen(path,rb) asfile:binary_datafile.read()returnbinary_data# 计算二进制数据的 md5defcalculate_md5(binary_data):# 检查是否是 Unicode 字符串# (因为二进制数据除了是从文件中直接读取的, 也有可能是从数据库中获取, 比如 mongo)ifisinstance(binary_data,str):# 将 Unicode 字符串编码为字节对象binary_databinary_data.encode(utf-8)md5_hashhashlib.md5(binary_data)returnmd5_hash.hexdigest()file_pathD:/input_image.pngbinaryfile_binary(file_path)# 计算 MD5 值md5calculate_md5(binary)print(md5)3.windows 获取本地文件的 md51certutil-hashfile test.pdf MD54.linux 获取本地文件的 md51md5sum test.pdf五.下载网络文件到本地常用的一种爬虫方法任何类型的文件都可以1234567importurllib.requestimporturllib.parseurlhttps://t7.baidu.com/it/u1595072465,3644073269fm193fGIFurllib.request.urlretrieve(url,D:/abc.jpg)六.循环建立多层文件夹直接建立多层文件夹, 如果已经存在的话, 则忽视12345defcreate_folder_if_not_exists(folder_path):# 检查文件夹是否存在ifnotos.path.exists(folder_path):# 如果不存在创建文件夹os.makedirs(folder_path)总结以上为个人经验希望能给大家一个参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2532315.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!