• 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.
  • Posts

    • Or, they could really turn the table upside down and rename it in BINARY. 00011001
    • I have tried that registry 'trick' from that video already. It doesn't work at all in Win11 for me   Yes it's a 3rd party app... that I am only using because of Microsoft breaking user customization in Windows 11. So yes... the is a Windows 11 issue. As of now to me, Microsoft has made a huge mistake with this in Windows 11.   The current font option in Windows 11 are terrible. They are just missing. People that want to use their own computer the way they want to, they need to avoid 11.
    • It's been an age since I did desktop support, but here goes: You have an issue with Windows 11, which is fair.  You are using a freeware 3rd party app to make modifications to the default Windows 11.  Since an update, this 3rd party application no longer plays nice with Windows 11.  And this is somehow Windows 11's fault? Sorry, not buying that this is a Windows 11 problem... it's a customization issue that has just appeared, but standard 3rd party support.   Clearly you're upset.  You can't make Windows do anything, just like you can't make MacOS run Explorer or Linux run Nintendo games natively.  And I know people are going to say "sure, it's possible..." but those aren't defining elements of the OS.  You can't have animated backgrounds in Windows 11 natively -- so it's trash amirite??? I did quick searches about changing the default fonts and there are ways to do it, and clearly 3rd party freeware apps can do it (basically my guess is they're making registry changes on your behalf) and clearly they're having issue.   You can make your computer do a lot of things, but sometimes you get what you pay for. Did a quick search and don't see an easy option in Windows 10 either.  Some of these links - ironically - are for Windows 10.  They still apply. Here's a video tutorial of how it can be done without a 3rd party:   Same reference here with a bit more detail: https://www.howtogeek.com/716407/how-to-change-the-default-system-font-on-windows-10/ Once the font is chosen, the size can be changed via personalization from my understanding. Hope this helps.
  • Recent Achievements

    • Week One Done
      maimutza earned a badge
      Week One Done
    • Week One Done
      abortretryfail earned a badge
      Week One Done
    • First Post
      Mr bot earned a badge
      First Post
    • First Post
      Bkl211 earned a badge
      First Post
    • One Year In
      Mido gaber earned a badge
      One Year In
  • Popular Contributors

    1. 1
      +primortal
      488
    2. 2
      +FloatingFatMan
      262
    3. 3
      snowy owl
      244
    4. 4
      ATLien_0
      222
    5. 5
      Edouard
      187
  • Tell a friend

    Love Neowin? Tell a friend!