在本文中,我们将为您详细介绍在PIL中打开base64字符串时出现奇怪的IOError的相关知识,此外,我们还会提供一些关于android-在phonegap中将base64字符串转换为pdf、And
在本文中,我们将为您详细介绍在PIL中打开base64字符串时出现奇怪的IOError的相关知识,此外,我们还会提供一些关于android-在phonegap中将base64字符串转换为pdf、Android将Base64字符串发布到PHP、base64字符串转化成图片、bash脚本中的if语句出现奇怪的错误的有用信息。
本文目录一览:- 在PIL中打开base64字符串时出现奇怪的IOError
- android-在phonegap中将base64字符串转换为pdf
- Android将Base64字符串发布到PHP
- base64字符串转化成图片
- bash脚本中的if语句出现奇怪的错误
在PIL中打开base64字符串时出现奇怪的IOError
我尝试在pythonshell中对图像进行编码和解码。我第一次在PIL中打开解码的base64字符串时,没有错误,如果我重复执行Image.open()命令,我将得到
IOError:无法识别图像文件。
>>> with open("/home/home/Desktop/gatherify/1.jpg", "rb") as image_file:... encoded_string = base64.b64encode(image_file.read())>>> image_string = cStringIO.StringIO(base64.b64decode(encoded_string))>>> img = Image.open(image_string)>>> img<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=576x353 at 0xA21F20C>>>> img.show() <-- Image opened without any errors. >>> img = Image.open(image_string)Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/lib/python2.6/dist-packages/PIL/Image.py", line 1980, in open raise IOError("cannot identify image file")IOError: cannot identify image file
为什么会这样呢?
答案1
小编典典创建时image_string
,您正在创建一个由字符串支持的假文件状对象。当您调用时Image.open
,它将 读取
该伪造文件,并将文件指针移到文件末尾。Image.open
再次尝试使用它只会给您带来EOF。
您需要重新创建StringIO
对象,或重新创建seek()
流的开头。
android-在phonegap中将base64字符串转换为pdf
在我的应用程序中,我收到了代表PDF的base64字符串.我希望用户能够将base64作为pdf保存到他的手机.我一直在寻找cordova-file-transfer插件,但是它需要一个(服务器)路径,可以从中下载文件,而不是转换base64字符串.
有没有人成功使用base64字符串在phonegap中下载pdf?
解决方法:
经过更多搜索和尝试之后,我发现了一些有用的方法.
Converting base64 to pdf blob
//Helper function that converts base64 to blob
function b64toBlob(b64Data, contentType, sliceSize) {
var input = b64Data.replace(/\s/g, ''),
byteCharacters = atob(input),
byteArrays = [],
offset, slice, byteNumbers, i, byteArray, blob;
contentType = contentType || '';
sliceSize = sliceSize || 512;
for (offset = 0; offset < byteCharacters.length; offset += sliceSize) {
slice = byteCharacters.slice(offset, offset + sliceSize);
byteNumbers = new Array(slice.length);
for (i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
//Convert to blob.
try {
blob = new Blob(byteArrays, { type: contentType });
}
catch (e) {
// TypeError old chrome, FF and Android browser
window.BlobBuilder = window.BlobBuilder ||
window.WebKitBlobBuilder ||
window.MozBlobBuilder ||
window.MSBlobBuilder;
if (e.name == 'TypeError' && window.BlobBuilder) {
var bb = new BlobBuilder();
for (offset = 0; offset < byteArrays.length; offset += 1) {
bb.append(byteArrays[offset].buffer);
}
blob = bb.getBlob(contentType);
}
else if (e.name == "InvalidStateError") {
blob = new Blob(byteArrays, {
type: contentType
});
}
else {
return null;
}
}
return blob;
};
然后下载本身就需要cordova-file插件:
var filetoSave= b64toBlob(fileData, 'application/pdf');
writeFile();
function writeFile() {
console.log("request file system");
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemRetrieved, onFileSystemFail);
}
function onFileSystemRetrieved(fileSystem) {
console.log("file system retrieved");
fileSystem.root.getFile(fileName, { create: true }, onFileEntryRetrieved, onFileSystemFail);
}
function onFileEntryRetrieved(fileEntry) {
console.log("file entry retrieved");
fileEntry.createWriter(gotFileWriter, onFileSystemFail);
}
function gotFileWriter(writer) {
console.log("write to file");
writer.onwrite = function (evt) {
alert('done');
}
writer.write(filetoSave);
window.open(fileName, '_blank');
}
function onFileSystemFail(error) {
console.log(error.code);
alert(error.code)
}
Android将Base64字符串发布到PHP
-– -–解决方案— -–
问题在我们的服务器上。如果将www放在域名前面,它只能处理发帖请求。这就是造成问题的原因。我将第一个答案设置为THE答案,因为一旦我整理出网址,它便会起作用。
原始问题
我的PHP脚本中有一个POST变量,始终为空。
我试图更改变量的名称,变量的内容等。
问题必须存在于Java代码中,因为当我var_dump()
在php中请求时,它为null。
这是我的情况:
我让用户拍摄照片,将照片保存到SD卡,然后得到图像的路径,最后将其转换为Base64字符串。然后,我想将此base64字符串发布到一个php脚本中,该脚本会将其从Base64转换回,并将其作为映像写入服务器硬盘驱动器中,如下所示:
File f = new File(savedImagePath);Bitmap bitmap = BitmapFactory.decodeFile(f.getPath()); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 30, stream); byte [] byte_arr = stream.toByteArray();String image_str = Base64.encodeToString(byte_arr, Base64.DEFAULT);HttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost("http://myURL/uploadImage.php");List<NameValuePair> pairs = new ArrayList<NameValuePair>();pairs.add(new BasicNameValuePair("image", image_str));post.setEntity(new UrlEncodedFormEntity(pairs));HttpResponse response = client.execute(post);
在服务器端,这就是我的PHP脚本:
<?php$base = $_POST["image"];$binary=base64_decode($base);header(''Content-Type: bitmap; charset=utf-8'');$file = fopen(''uploaded_image.jpg'', ''w'');fwrite($file, $binary);fclose($file);echo "script done executing";?>
这是我要发布的Base64字符串的示例:
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
答案1
小编典典这是图像的代码:
ByteArrayOutputStream bao = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.JPEG, 90, bao);byte [] ba = bao.toByteArray();String ba1=Base64.encodeBytes(ba);ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();nameValuePairs.add(new BasicNameValuePair("image",ba1));
这是用于将图像发送到服务器的HTTP代码:
HttpClient httpclient = new DefaultHttpClient();HttpPost httppost = new HttpPost("http://servername.com/uploadimage.php");httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); HttpResponse response = httpclient.execute(httppost);HttpEntity entity = response.getEntity();is = entity.getContent();
如果您发现更多困难,请询问我或进行检查:
- 这个类似的图片上传教程
- Base64示例
在PHP头文件中的更改:
header(''Content-Type: image/jpg; charset=utf-8'');$base=$_REQUEST[''image''];
base64字符串转化成图片
package com.dhht.wechat.util;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.*;
/**
* @Author: sh
* @Description: ImgUtil
* @Date: 9:14 2019/7/1
*/
public class ImgUtil {
/**
* 图片转化成base64字符串
*
* @param imgPath
* @return
*/
public static String GetImageStr(String imgPath) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
String imgFile = imgPath;// 待处理的图片
InputStream in = null;
byte[] data = null;
String encode = null; // 返回Base64编码过的字节数组字符串
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
try {
// 读取图片字节数组
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
encode = encoder.encode(data);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return encode;
}
/**
* base64字符串转化成图片
*
* @param imgData 图片编码
* @param imgFilePath 存放到本地路径
* @return
* @throws IOException
*/
@SuppressWarnings("finally")
public static boolean GenerateImage(String imgData, String imgFilePath) throws IOException { // 对字节数组字符串进行Base64解码并生成图片
if (imgData == null) // 图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
OutputStream out = null;
try {
out = new FileOutputStream(imgFilePath);
// Base64解码
byte[] b = decoder.decodeBuffer(imgData);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
out.write(b);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
out.flush();
out.close();
return true;
}
}
}
bash脚本中的if语句出现奇怪的错误
如何解决bash脚本中的if语句出现奇怪的错误?
我在bash中创建了一个用于显示日志的简单脚本,阅读了bash脚本的文档,实际上我所做的一切都正确,但是我的脚本无法正常工作。我真的是sh脚本中的新秀,所以我需要在这里询问。 所以我的脚本是:
#!/bin/bash
echo How many lines of log you want to see:
read linesCount
echo ''What type of log you want to see? (info / error / warn) type all or just hit enter to see all types of logs.''
read logType
if [${#logType} -lt 3]
then
tail -n $linesCount root/projects/retwiter/logs/logs.log |grep $logType
fi
当我运行脚本时,它向我显示了以下内容:
show-retwiter-logs.sh: 8: show-retwiter-logs.sh: [5: not found
在第二个“记录”中,我输入了错误,这就是为什么它显示了它-> [5: not found
但我实际上不知道为什么
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
今天的关于在PIL中打开base64字符串时出现奇怪的IOError的分享已经结束,谢谢您的关注,如果想了解更多关于android-在phonegap中将base64字符串转换为pdf、Android将Base64字符串发布到PHP、base64字符串转化成图片、bash脚本中的if语句出现奇怪的错误的相关知识,请在本站进行查询。
本文标签: