What I am trying to do is make some smart contracts that I am going to sell to my clients giving them ownership of those contracts. A web service using web3 will be available to retrieve some information about these contracts. I would like to give my client to link their contract to an image, that I will retrieve using my web service. Since there is no need of consensus needed for the image data, I prefer to have it stored off-chain using some kind of p2p network. This will avoid fees to store/Modify those images as well. It would be interesting if I can somehow link the client contract in Ethereum with his image in the other network. Is there any tool that I can build this kind of logic with ?
Swarm or IPFS are solutions for distributed document storage
the smart contract can't communicate with the offchain space even with another p2p network unless if you are using an oracle. so in your case, the hint is to use IPFS (distributed file System) with oraclizeit (maybe if you need a TLSnotary).
In a nutshell: store the data in a IPFS node, The IPFS will provide you a unique id(multihash) per file (a Base58 encoded hash) which you could store in your smartcontract storage.
e.g : `Qmd286K6pohQcTKYqnS1YhWrCiS4gz7Xi34sdwMe9USZ7u` //multihash
then you could access outside the smartcontract the picture by using its multihash stored previously. here is a snippet code for nodejs (IPFs module)
or alternatively you could use ipfs-js
an example of file Manager : https://github.com/tableflip/ipfs-filexp
There is another possibility is to use Storj, but as i know they don't provide any ethereum integration.