• 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

    • I happen to try it today not knowing about the update and was happily surprised; it is great.
    • Hello, Hardware Support Applications are a special kind of Microsoft Store app and have to go through additional checks and certifications because they can communicate directly with their driver, which means that a vulnerability in one of them could allow an attacker access to kernel space memory through the HSA ←→ device driver interface.  In other words, a BYOVD (bring your won vulnerable driver) attack, but with the HSA being used as an extra step. Remember, the Microsoft Store is strategic to Microsoft's long-term goals: they see it as the means to get the same 30% of every application sale that Apple and Google get through their stores, which is why it has been a fixture of Windows since Windows 8 was introduced in 2012 despite a low adoption rate.  Microsoft cannot afford to have anyone get an app through their store which causes a security issue for their end users.  Even if the app was written by and uploaded to the Microsoft Store by a partner, it is Microsoft's name on the store, and they are the ones that will have reputational/brand damage if they allow something malicious into their store. Regards, Aryeh Goretsky  
    • This is more from my childhood, when nickelodeon just launched and had to license shows to have something to air. Left a big an impact, but probably more emotion positive / childhood thing. Europe got the follow up season's decade's latter with the animation studio that did Air Bender but never licenses for the US. I miss the day's of longer intro's. Nier (PS3) Intro is epic, and was very unexpected.  PS1 Xengears was also epic and an amazing game.  
    • Sayan Sen, do you think one day an image of the Windows Vista desktop or the wallpaper could be used in the primary image of an article? (When I think of CDs and DVDs I think of that release of Windows and of earlier releases; it is the one that debuted IMAPI 2.0 and other features.)
    • Big fan of EAC Here's a good non-default naming scheme I found on the web (can't take credit) File Name Scheme - %albumartist%\%year% - %albumtitle%\%tracknr2% %title% Various Artists Naming Scheme - Various Artists\%year% - %albumtitle%\%tracknr2% %title% Also, I need test but there is a new flac.exe binary & dll you can drop in the folder to upgrade flac support. I did this pre EAC 1.8. EAC 1.8 did upgrade it to 1.4.3. Flac 1.5.0 came out this year. https://ftp.osuosl.org/pub/xiph/releases/flac/ I don't know how much of a difference / impact will make.
  • 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
      485
    2. 2
      +FloatingFatMan
      263
    3. 3
      snowy owl
      240
    4. 4
      ATLien_0
      227
    5. 5
      Edouard
      188
  • Tell a friend

    Love Neowin? Tell a friend!