Technical:
The only technical difference is, that predefined-transforms have a different directory structure:
/asset-folder/_transform-name/image.jpg
whereas inline-transforms use dimensions:
/asset-folder/_300x100/image.jpg
Personally I like the first one more.
.
Users:
The difference for users is, that only predefined-transforms can be selected in RichText-fields.
.
Development:
I often use just a few transforms on my projects, so I find maintaining them from the backend easier.
But you could just as well create yourself an include-file to have everything in one place:
/_includes/image_transforms.html
:
{% set transform_1 = {
mode: 'crop',
width: 100,
height: 100,
quality: 100,
position: 'top-center'
} %}
{% set transform_2 = {
mode: 'crop',
width: 50,
height: 50,
quality: 75,
position: 'center-center'
} %}
/some_template.html
:
{% include "_includes/image_transforms" %}
<img src="{{ asset.getUrl(transform_1) }}">
<img src="{{ asset.getUrl(transform_2) }}">