What I was doing, converting the whole image to base64 string and sending it as message. But message sending failed each time. I got maximum payload time 32 KB for a single PubNub message. If my message size is less than 32 KB will it be delivered?
According to what I read online I found and implemented the solution of uploading each image to a 3rd party cloud storage such as Amazon S3 (which is pretty cheap and has SDK for all knows devices), and in the message send only the unique identifier of the image which is placed in the cloud. The other side will receive the image identifier and fetch it from the cloud. This way you can keep your PubNub messages small.
What Shahal suggested is correct. Upload to S3 or some other provider and send the url across PubNub.