You can hold images as encrypted characters such like base64 in Fabric Network.
That was once mentioned in IBM DeveloperWorks Blog, but I can't find the article.
If you use Hyperledger Composer, I think assigning an image to a property of the asset is useful.
In my case, tx is submitted from node.js server like below.
'use strict'
const util = require('util');
var fs = require('fs');
const readFile = util.promisify(fs.readFile);
const BusinessNetworkConnection = require('composer-client').BusinessNetworkConnection;
this.bizNetworkConnection = new BusinessNetworkConnection();
this.cardName = '<REPLACE_CARD_NAME>';
async function createAsset(imgPath) {
try {
// Connect to Fabric Network.
let definition = await this.bizNetworkConnection.connect(this.cardName)
let factory = definition.getFactory();
// Create a new asset which have property for base64 image.
let newAsset = factory.newResource('com.namespace.your', 'AssetName', 'assetId');
newAsset.imageBase64 = await readFile(imgPath,'base64');
// Add the Asset to AssetRegistry.
let assetRegistry = await this.bizNetworkConnection.getAssetRegistry('com.namespace.your.AssetName');
await assetRegistry.add(newAsset);
} catch (err) {
console.error(err);
} finally {
this.bizNetworkConnection.disconnect();
}
}