Будут ли Picasso fit(), resize() и transform() уменьшать размер изображений перед загрузкой?

Я знаю, что при использовании fit() и resize() размер изображения уменьшается перед загрузкой. Тем не менее, в тех случаях, когда используется listView и соотношения изображений различаются, мне нужно установить layout_width и layout_height для imageView как wrap_content, а затем использовать transform() для определения соотношения изображения перед помещением его в imageView.

eg.

        Picasso.with(mContext).load(region.getImage_url()).transform(new Transformation() {
            @Override
            public Bitmap transform(Bitmap source) {
                int targetWidth = getContext().getSharedPreferences(Constants.PREFERENCES, Context.MODE_PRIVATE).getInt(Constants.DEVICE_WIDTH, 0);
                double aspectRatio = (double) source.getHeight() / (double) source.getWidth();
                int targetHeight = (int) (holder.targetWidth * aspectRatio);
                Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
                if (result != source) {
                    // Same bitmap is returned if sizes are the same
                    source.recycle();
                }
                return result;
            }

            @Override
            public String key() {
                return "transformation" + " desiredWidth";
            }
        }).into(holder.imageView);

Итак, моя проблема в том, будет ли метод преобразования Пикассо также иметь дело с уменьшением размеров изображений перед загрузкой? Если нет, то каков наилучший подход к этому, не устанавливая фиксированное соотношение для просмотра изображений в списке?


person Derekyy    schedule 14.01.2015    source источник
comment
Вы хотите уменьшить размер изображения перед его загрузкой?   -  person Harry    schedule 14.01.2015
comment
да, это то, что я хочу. Или у меня какая-то ошибка? Основная цель — сделать загрузку изображений эффективной.   -  person Derekyy    schedule 14.01.2015
comment
Нет, я понял твою мысль. Я много работал над созданием эффективного использования полосы пропускания. Вы можете увидеть мой ответ, если это может вам помочь.   -  person Harry    schedule 14.01.2015
comment
the image gets downsized before downloading как именно вы собираетесь это сделать?   -  person njzk2    schedule 16.01.2015


Ответы (2)


Я также работаю с Пикассо, и мой ответ «нет». Изображения всегда сначала загружаются, затем изменяются размеры/трансформируются, а затем отображаются.

Единственный способ загрузить уменьшенный размер (для отображения в ListView) — это предоставить уменьшенный размер или уменьшенную версию изображения. Этого легко добиться, если вы размещаете изображения на своем собственном сервере.

person Harry    schedule 14.01.2015

Вы можете использовать службу Thumbor для обрезки и изменения размера изображений перед загрузкой. У Square есть хороший Java-клиент для этого — Pollexor. И специальный Picasso RequestTransformer для Pollexor. Тем не менее, вы получите всю предварительную обработку, извлеченную на серверную часть.

person colriot    schedule 16.01.2015
comment
Спасибо за предложение. Тем не менее, бэкэнд находится в руках клиентов, и я думаю, что не могу заставить его это сделать. Спасибо в любом случае. Это может помочь мне в будущем - person Derekyy; 18.01.2015
comment
@Derekyy Рад, в чем-то это было полезно. - person colriot; 18.01.2015