• 0

C# save tiff from binary


Question

So I have USPS Web Tools to play with (we ship a lot of stuff here and would be beneficial to learn how to integrate it into our system). So I can execute the xml requests perfectly. My only question is it returns a base64 encoded binary string apparently (from the documentation). After playing around with memorystreams and the System.Drawing.Imaging library I can not seem to get it to write out the returned value. Anyone have any ideas on how to take a 64 binary string and save it to a file? I've tried both of these snippets below:

EDIT the blob is a tiff data.

// shippingLabel is a byte[] containing the tiff data in a base64 binary format.
MemoryStream ms = new MemoryStream(shippingLabel, true);
            ms.Write(p2.ShippingLabel, 0, p2.ShippingLabel.Length);
            try
            {
                System.Drawing.Image tiffImg = Image.FromStream(ms, true);
                tiffImg.Save(@"C:\test\test2.tiff               tiffImg.Dispose();
                tiffImg = null;
            }
            catch
            {
            }

            try
            {
                using (StreamWriter sw = new StreamWriter(@"C:\test\test.tiff", true))
                {
                    sw.Write(ms);
                    sw.Close();
                    sw.Dispose();
                }
            }
            catch
            {
            }

Link to comment
https://www.neowin.net/forum/topic/965976-c-save-tiff-from-binary/
Share on other sites

4 answers to this question

Recommended Posts

  • 0

To Base64-encode something is to turn it into a string. So to say that shipping label is a byte array containing the base64 binary format doesn't make a whole lot of sense to me.

Are you getting a string from FedEx or a byte array? If you're getting a string, are you correctly turning it into the byte[] by calling System.Convert.FromBase64String() ?

Are you getting an error when you try the above techniques? or does it just write a file that isn't a valid TIFF.

Also, you're sure its supposed to be a TIFF?

  • 0

I'm sorry I should have been more clear I take the response (image) string and then turn it into bytes[]. USPS documentation says the response returns a base64 binary data blob. I'm not sure this is the best way to go about doing it, I've been googling different methods on how to handle the returned string and that's what I keep seeing. I've just been trying to build on that and save the data to a tiff file. USPS lets you specify TIFF so I would imagine that part is ok (I checked the response xml and it shows the data so I know something is being returned successfully). The shippingLabel variable is in a byte[] format. I get the bytes with:

UTF8Encoding encoding = new UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(returnedStr);
shippingLabel = byteArray;

Documentation snippet:

DeliveryConfirmationV4.0Response /

required

Delivery Confirmation Label, if requested (where <ImageType> tag not "None")

base64Binary

  • 0
  On 05/01/2011 at 17:49, sathenzar said:

I'm sorry I should have been more clear I take the response (image) string and then turn it into bytes[]. USPS documentation says the response returns a base64 binary data blob. I'm not sure this is the best way to go about doing it, I've been googling different methods on how to handle the returned string and that's what I keep seeing. I've just been trying to build on that and save the data to a tiff file. USPS lets you specify TIFF so I would imagine that part is ok (I checked the response xml and it shows the data so I know something is being returned successfully). The shippingLabel variable is in a byte[] format. I get the bytes with:

UTF8Encoding encoding = new UTF8Encoding();
Byte[] byteArray = encoding.GetBytes(returnedStr);
shippingLabel = byteArray;

Documentation snippet:

DeliveryConfirmationV4.0Response /

required

Delivery Confirmation Label, if requested (where <ImageType> tag not "None")

base64Binary

From that you would get a byte array representing the UTF characters returned from the query, not the binary they represent. You should do this

Byte[] byteArray = System.Convert.FromBase64String(returnedStr);
shippingLabel = byteArray;

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.