Due to their write-sensitive nature, flash storage (both USB sticks and SD cards) normally don’t get zeroed out when data is deleted, making any images created for backup purposes contain random data in the empty sectors. This makes images take up the full size of the disk/card even if very little is actually used from it and also makes image poorly compressible.
The solution is to zero out the unused space in the image file before compressing it. Linux has all the tools necessary for this task readily built-in. If one is not available, a bootable self-contained system such as SystemRescue can be used instead.