If karten refers to a JSON array in the, then s1 ->> 'karten doesn't return each element individually, but a one string representing the array. So array_agg() doesn't really aggregate multiple values - only one. The result is an array with a single element - that happens to look like a JSON array.
You can remove an element from a JSON array if the values is jsonb (the recommended data type to handle JSON in Postgres anyway) using the - operator:
select (s1 -> 'karten')::jsonb - '8 eich.jpg'
will return a jsonb value that is an without the key '8 eich.jpg'.
Unfortunately there is no easy conversion from a JSON array to a native array. Search this site, there are multiple answers for that.