martinrybak / SQLClient

Native Microsoft SQL Server client for iOS
http://objcsharp.wordpress.com/2013/10/15/an-open-source-sql-server-library-for-ios/
MIT License
124 stars 51 forks source link

jpegdecompresssurface : picture decode failed : e00002d1 #40

Open totoourworld opened 7 years ago

totoourworld commented 7 years ago

jpegdecompresssurface : picture decode failed : e00002d1 I can get exact same data as image data from sql server. So i try to load image from NSData, below the code,

martinrybak commented 7 years ago

Please try the types branch.

totoourworld commented 7 years ago

I used types branch and used the sample project for testing but same. can you give me the source code for that? I checked the NSData *image_source=[row objectForKey:@"Company_Logo"]; by log the value. but same as data in sql. How can i use this for mapping to uiimage type? can you teach me? i want your reply. thanks . king regards,

martinrybak commented 7 years ago

It could be related to this: https://msdn.microsoft.com/en-us/library/ms177687(v=sql.90).aspx

What version of SQL Server are you using? What data type is the column with the image? If possible, can you attach the image file here?

totoourworld commented 7 years ago

I am using the SQL EXPRESS 2016. I used the Company_Logo(image,null) for saving/loading image.

Additionally, I am trying to load the image that saved by C# program i made. In android , the image can be read by byte array and convert that to bitmap image, and it is working. In C# , it is also working well.

but in iOS when i tried to do like that with above code , it is showing jpegdecompresssurface : picture decode failed : e00002d1

totoourworld commented 7 years ago

1

totoourworld commented 7 years ago

3d_apple_logo_preview_featured

totoourworld commented 7 years ago

visual_csharp_logo1-300x230

totoourworld commented 7 years ago

images

totoourworld commented 7 years ago

These three pictures , i used to try. jpg file looks like that issue , but png file is not showing at all.

totoourworld commented 7 years ago

Hello , Mr.Martin Rybak. I tried to debug the code and found something related. So, (void)process:(NSArray)results { NSArray table=[results objectAtIndex:0]; NSDictionary row=[table objectAtIndex:0]; NSData image_source=[row objectForKey:@"Company_Logo"]; UIImage image=[[UIImage alloc] initWithData:image_source]; image=[UIImage imageWithData:image_source]; [self.imageView setImage :image]; } in this code ,(NSArray) results is returning values from sql. in here , i checked the @"Company_Logo". It was NSInlineData and 4096bytes. That's why the above 5kb jpg image is not showing full. I tried to use small jpg image (for example 400bytes) , and it is showing well. Can you give me some solution for large image? Really thanks for your help. Regards.

martinrybak commented 7 years ago

Please put a breakpoint on line 544 of SQLClient.m:

https://github.com/martinrybak/SQLClient/blob/types/SQLClient/SQLClient/SQLClient/SQLClient.m#L544

What is the value of column->size?

totoourworld commented 7 years ago

in image type the column size is 4096

totoourworld commented 7 years ago

column->size is 4096

martinrybak commented 7 years ago

OK, to be sure, put a breakpoint on this line and verify that dbcollen(_connection, c) is returning 4096 for your image column.

https://github.com/martinrybak/SQLClient/blob/types/SQLClient/SQLClient/SQLClient/SQLClient.m#L261

martinrybak commented 7 years ago

Also try changing your data type from image to varbinary(max)

totoourworld commented 7 years ago

I tried both type, means , i saved the data to image type and varbinary(max) type and read the data using your framework. In 261 , breakpoint, the column.size is 4096 for both types , sir.

martinrybak commented 7 years ago

OK, in the freetds docs I found the following:

text size: default value of TEXTSIZE, in bytes. For text and image datatypes, sets the maximum width of any returned column. Cf. set TEXTSIZE in the T-SQL documentation for your server.

http://www.freetds.org/userguide/freetdsconf.htm

Try adding a file called freetds.conf to your app with these contents:

[global]
text size = 10000

Then add an environment variable to your app called FREETDS whose value is the path to that file.

http://www.freetds.org/userguide/envvar.htm

See if that helps.

totoourworld commented 7 years ago

sorry but my app means? ios project, sir?

martinrybak commented 7 years ago

Yes, add it to your iOS project.

totoourworld commented 7 years ago

yeah ,i added freetds.conf to SQLClint folder , but i am not sure about the environment variable adding , can you guide me a bit more , sir? thanks.

martinrybak commented 7 years ago

http://nshipster.com/launch-arguments-and-environment-variables/

totoourworld commented 7 years ago

freetds.conf path would be full path like this "/Volumes/Mac_Data/KO/pos_australia/latest/SQLClient_Type/SQLClient-types/SQLClient/SQLClient/SQLClient/freetds.conf" or what's the right path of freetds.conf file, sir?

totoourworld commented 7 years ago

I added with your requirement and ran the project ntext type in sql returning column->size 8192 bytes in dbcollen(_connection, c) 164 line. but image type and varbinary is same as 4096, sir.

martinrybak commented 7 years ago

http://stackoverflow.com/questions/12205785/getting-bundle-file-references-paths-at-app-launch

totoourworld commented 7 years ago

I got file path using your reference source code , "/var/containers/Bundle/Application/0E8B03A5-869A-4435-AE41-21972F55CA4B/SQLClient.app/freetds.conf" so i set above path as value of FREETDS.

totoourworld commented 7 years ago

what value would i check by debugging?

totoourworld commented 7 years ago

00b9eedc-325f-4313-95ba-c97b0a649ffa 9f1448e2-d6b8-4b26-acb7-4323ae25c50f 14048687-816f-4288-bfd4-e90db90ac44d

martinrybak commented 7 years ago

The value must be relative to your app. Try freetds.conf instead.

totoourworld commented 7 years ago

I changed with your instruction and tested , again . but the column->size of image is still 4096

totoourworld commented 7 years ago

ef9826a7-0c22-496b-91c7-dd11a662395a 4f0e0644-3328-4224-bb90-386516836e4c

martinrybak commented 7 years ago

Try setting other values to verify that TDS is finding your file. http://www.freetds.org/userguide/freetdsconf.htm

totoourworld commented 7 years ago

i setup the sql express 2016 to other computer windows 10 system. in here , TDS version how can i check this?

I am really sorry for bothering your time, but can you teach me via my screen? like using teamviewer,sir?

martinrybak commented 7 years ago

I'm sorry, I can't do that. Please do some reading up on FreeTDS until you can customize the text size setting. I think that is the problem.

totoourworld commented 7 years ago

so the conclsion is change the text size?

amiparaharikant commented 6 years ago

i facing this issue in my iOS app. please help me out. thank you.

in android application is working fine to get binary image from SQL server but facing issue in iOS and load some part of image only.

totoourworld commented 6 years ago

can you show me the code?

On Sat, Aug 4, 2018 at 12:38 PM, Harikant Amipara notifications@github.com wrote:

i facing this issue in my iOS app. please help me out. thank you.

in android application is working fine to get binary image from SQL server but facing issue in iOS and load some part of image only.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/martinrybak/SQLClient/issues/40#issuecomment-410425470, or mute the thread https://github.com/notifications/unsubscribe-auth/ATFs4zEkmQotzpgfH0rTkdfuzxIYLI7vks5uNTM4gaJpZM4LrSNS .

amiparaharikant commented 6 years ago

screen shot 2018-08-04 at 11 38 59 am @totoourworld i'm getting size of image is still 4096

martinrybak commented 6 years ago

https://stackoverflow.com/questions/4500506/php-is-truncating-mssql-blob-data-4096b-even-after-setting-ini-values-am-i-m

amiparaharikant commented 6 years ago

is this issue of getting size of image 4096byte is from SQL SERVER ?