图片到base64然后上传

时间:2018-04-26 03:21:38

标签: c# php xamarin xamarin.forms

我正在开发一个Xamarin.Forms PCL应用程序,用户可以在其中选择照片并上传。我想将所选照片发送到网络服务,以便检查格式和文件大小是否正确,然后上传到谷歌照片。

要将其传输到我的网络服务,它需要是一个字符串。我尝试使用

MediaFile file;

var stream = file.GetStream();
var bytes = new byte[stream.Length];
await stream.ReadAsync(bytes, 0, (int)stream.Length);
string content = System.Convert.ToBase64String(bytes);

我的第一个问题是我不知道要将文件初始化为什么,以便正确转换。用户选择图像后,将其存储在具有ImageSource image_source;

的ram中

一旦上传,它就会到达我的PHP网站,然后我会用$image = $_POST['image_string'];

获取图片

我的第二个问题是如何将其转换回图像以检查文件类型和图像大小?

使用

将其发送到网站
var values = new Dictionary<string, string>
        {
            {"session", UserData.session },
            {"image", ImageAsBase64().Result.Length.ToString() }
        };

        var content = new FormUrlEncodedContent(values);
        var response = await App.client.PostAsync(WebUtils.URL, content);
        var responseString = await response.Content.ReadAsStringAsync();
        string page_result = responseString;

2 个答案:

答案 0 :(得分:1)

您可以使用PHP的GD图像库基本上完成您想要的任何图像。

要从字符串中获取图像,请使用以下命令:

 $sourceImg = imagecreatefromstring(file_get_contents($file));

然后保存图像:

 imagejpeg($sourceImg, $targetPath, 60);  //60 is a compression

以下是一些链接:

imagecreatefromstring():

http://php.net/manual/en/book.image.php

GD图书馆: {{3}}

答案 1 :(得分:1)

将图像上传到服务器是没有意义的,而不是检查它的大小。除非您要压缩它并减小服务器上的大小。

以下是检查图像大小的方法:

var ImageStream = file.GetStream();
var bytes = new byte[ImageStream.Length];
//check if image is too big
double ImageSizeInMB = ((double)(bytes.Length) / (1024 * 1024));
//check if image size is bigger than 5 MB
if(ImageSizeInMB > 5)
{
    await DisplayAlert("Error", "Image is too big,reduce resolution and try again", "OK");
    return;
}

之后,您需要让用户重新拍摄照片,或者您可以开始压缩它并调整其大小。拍摄后我无法压缩图像,但我确信这是可能的,因为你可以在使用媒体插件选项拍摄图像之前完成。

现在将图像转换为base64:

await ImageStream.ReadAsync(bytes, 0, (int)ImageStream.Length);
string base64 = System.Convert.ToBase64String(bytes);

就是这样,您现在有了相机拍摄的图像并转换为Base64字符串。