Instantly share code, notes, and snippets.

Embed
What would you like to do?
CircleTransform for Picasso
/*
* Copyright 2014 Julian Shen
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.picassodemo;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import com.squareup.picasso.Transformation;
/**
* Created by julian on 13/6/21.
*/
public class CircleTransform implements Transformation {
@Override
public Bitmap transform(Bitmap source) {
int size = Math.min(source.getWidth(), source.getHeight());
int x = (source.getWidth() - size) / 2;
int y = (source.getHeight() - size) / 2;
Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size);
if (squaredBitmap != source) {
source.recycle();
}
Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig());
Canvas canvas = new Canvas(bitmap);
Paint paint = new Paint();
BitmapShader shader = new BitmapShader(squaredBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP);
paint.setShader(shader);
paint.setAntiAlias(true);
float r = size/2f;
canvas.drawCircle(r, r, r, paint);
squaredBitmap.recycle();
return bitmap;
}
@Override
public String key() {
return "circle";
}
}
@NationB1

This comment has been minimized.

Show comment
Hide comment
@NationB1

NationB1 Oct 22, 2013

Thank you!

NationB1 commented Oct 22, 2013

Thank you!

@edwardinubuntu

This comment has been minimized.

Show comment
Hide comment
@edwardinubuntu

edwardinubuntu Nov 12, 2013

Thank you, will you send a pull request back to Picasso project.

edwardinubuntu commented Nov 12, 2013

Thank you, will you send a pull request back to Picasso project.

@Vivekbhusal

This comment has been minimized.

Show comment
Hide comment
@Vivekbhusal

Vivekbhusal commented Feb 28, 2014

thank you

@danielpassos

This comment has been minimized.

Show comment
Hide comment
@danielpassos

danielpassos Mar 27, 2014

Very nice. Thanks!

danielpassos commented Mar 27, 2014

Very nice. Thanks!

@ProstoSawa

This comment has been minimized.

Show comment
Hide comment
@ProstoSawa

ProstoSawa Apr 26, 2014

Thanks! Спасибо!

ProstoSawa commented Apr 26, 2014

Thanks! Спасибо!

@81813780

This comment has been minimized.

Show comment
Hide comment
@81813780

81813780 Apr 28, 2014

thanks ,it's very helpful for me

81813780 commented Apr 28, 2014

thanks ,it's very helpful for me

@hpadrao

This comment has been minimized.

Show comment
Hide comment
@hpadrao

hpadrao commented Apr 29, 2014

Awesome

@Gorbas

This comment has been minimized.

Show comment
Hide comment
@Gorbas

Gorbas commented May 7, 2014

Great!!

@pimguilherme

This comment has been minimized.

Show comment
Hide comment
@pimguilherme

pimguilherme commented May 12, 2014

Thanks!

@Kyrmyzyanik

This comment has been minimized.

Show comment
Hide comment
@Kyrmyzyanik

Kyrmyzyanik Jun 16, 2014

Thank you!!!

Kyrmyzyanik commented Jun 16, 2014

Thank you!!!

@rizaramadan

This comment has been minimized.

Show comment
Hide comment
@rizaramadan

rizaramadan Jul 12, 2014

works perfectly! Thank you!

rizaramadan commented Jul 12, 2014

works perfectly! Thank you!

@gbero

This comment has been minimized.

Show comment
Hide comment
@gbero

gbero Jul 29, 2014

Nice thanks!!
If you're looking for just rounded corners here's a pretty decent solution : https://gist.github.com/aprock/6213395

gbero commented Jul 29, 2014

Nice thanks!!
If you're looking for just rounded corners here's a pretty decent solution : https://gist.github.com/aprock/6213395

@chipcerio

This comment has been minimized.

Show comment
Hide comment
@chipcerio

chipcerio Jul 31, 2014

and key needs to be unique

@Override
public String key() {
    return "circle(x=" + x + ",y=" + y + ")";
}

chipcerio commented Jul 31, 2014

and key needs to be unique

@Override
public String key() {
    return "circle(x=" + x + ",y=" + y + ")";
}
@welshk91

This comment has been minimized.

Show comment
Hide comment
@welshk91

welshk91 Oct 9, 2014

This is great. I'm new to Transformations and am fiddling with this source code, trying to get a circular border around it. Any tips?

welshk91 commented Oct 9, 2014

This is great. I'm new to Transformations and am fiddling with this source code, trying to get a circular border around it. Any tips?

@baczynsky-julien

This comment has been minimized.

Show comment
Hide comment
@baczynsky-julien

baczynsky-julien Oct 21, 2014

simply draw another circle, with a color

baczynsky-julien commented Oct 21, 2014

simply draw another circle, with a color

@berkkaraoglu

This comment has been minimized.

Show comment
Hide comment
@berkkaraoglu

berkkaraoglu Nov 14, 2014

I have prepared a modified version of Julian' s Circle Transform to show a border around the circle image.

https://gist.github.com/berkkaraoglu/ab4caa8b1fe48231dec2

berkkaraoglu commented Nov 14, 2014

I have prepared a modified version of Julian' s Circle Transform to show a border around the circle image.

https://gist.github.com/berkkaraoglu/ab4caa8b1fe48231dec2

@fazlurr

This comment has been minimized.

Show comment
Hide comment
@fazlurr

fazlurr Nov 20, 2014

Nice Work! Thanks 😄

fazlurr commented Nov 20, 2014

Nice Work! Thanks 😄

@Gruneau

This comment has been minimized.

Show comment
Hide comment
@Gruneau

Gruneau Jan 8, 2015

I get an exception whenever my app tries to load a .gif (the placeholder one from facebook) and run a circletransform (or blur)

Caused by: java.lang.NullPointerException: Attempt to read from field 'int android.graphics.Bitmap$Config.nativeInt' on a null object reference

Any ideas? Works lovely otherwise..

Gruneau commented Jan 8, 2015

I get an exception whenever my app tries to load a .gif (the placeholder one from facebook) and run a circletransform (or blur)

Caused by: java.lang.NullPointerException: Attempt to read from field 'int android.graphics.Bitmap$Config.nativeInt' on a null object reference

Any ideas? Works lovely otherwise..

@alxscms

This comment has been minimized.

Show comment
Hide comment
@alxscms

alxscms Jan 26, 2015

To get this script work with GIF files, replace line 42 by:

// GIF files generate null configs, assume ARGB_8888
Bitmap.Config config = source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
Bitmap bitmap = Bitmap.createBitmap(size, size, config);

alxscms commented Jan 26, 2015

To get this script work with GIF files, replace line 42 by:

// GIF files generate null configs, assume ARGB_8888
Bitmap.Config config = source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
Bitmap bitmap = Bitmap.createBitmap(size, size, config);
@EllySmore

This comment has been minimized.

Show comment
Hide comment
@EllySmore

EllySmore Feb 24, 2015

Dis is awesome. Works like a charm. I have a rounded cornered transformer in one of my projects if you guys want to check out.

EllySmore commented Feb 24, 2015

Dis is awesome. Works like a charm. I have a rounded cornered transformer in one of my projects if you guys want to check out.

@dks0280703

This comment has been minimized.

Show comment
Hide comment
@dks0280703

dks0280703 commented Feb 25, 2015

Awesome!

@nbarraille

This comment has been minimized.

Show comment
Hide comment
@nbarraille

nbarraille Mar 11, 2015

Actually, line 42 should be Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);

Otherwise this will show up a black background for image configured with other configurations

nbarraille commented Mar 11, 2015

Actually, line 42 should be Bitmap bitmap = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);

Otherwise this will show up a black background for image configured with other configurations

@philipgiuliani

This comment has been minimized.

Show comment
Hide comment
@philipgiuliani

philipgiuliani May 4, 2015

Thanks a lot! Works great!

philipgiuliani commented May 4, 2015

Thanks a lot! Works great!

@vuhung3990

This comment has been minimized.

Show comment
Hide comment
@vuhung3990

vuhung3990 May 28, 2015

thank you, but why it not work on android 2.3 (geanymotion)

vuhung3990 commented May 28, 2015

thank you, but why it not work on android 2.3 (geanymotion)

@komalnikhare

This comment has been minimized.

Show comment
Hide comment
@komalnikhare

komalnikhare Jun 20, 2015

not working properly in 2.3

komalnikhare commented Jun 20, 2015

not working properly in 2.3

@heitorcolangelo

This comment has been minimized.

Show comment
Hide comment
@heitorcolangelo

heitorcolangelo Aug 19, 2015

Thanks alxscms, worked!

heitorcolangelo commented Aug 19, 2015

Thanks alxscms, worked!

@EternalCoding

This comment has been minimized.

Show comment
Hide comment
@EternalCoding

EternalCoding commented Sep 2, 2015

really cool

@dtygel

This comment has been minimized.

Show comment
Hide comment
@dtygel

dtygel Oct 26, 2015

I've incorporated alxscms suggested change so that the script works with gif and other palletted bitmaps: https://gist.github.com/dtygel/71b77481ff9ddec26646

dtygel commented Oct 26, 2015

I've incorporated alxscms suggested change so that the script works with gif and other palletted bitmaps: https://gist.github.com/dtygel/71b77481ff9ddec26646

@oradkovsky

This comment has been minimized.

Show comment
Hide comment
@oradkovsky

oradkovsky commented Nov 8, 2015

thnx!

@mananwason

This comment has been minimized.

Show comment
Hide comment
@mananwason

mananwason Nov 12, 2015

I get a Null pointer @julianshen. This is the stack Trace. Thanks for the help.
java.lang.NullPointerException: Transformation circle returned null after 0 previous transformation(s).

mananwason commented Nov 12, 2015

I get a Null pointer @julianshen. This is the stack Trace. Thanks for the help.
java.lang.NullPointerException: Transformation circle returned null after 0 previous transformation(s).

@ayushgp

This comment has been minimized.

Show comment
Hide comment
@ayushgp

ayushgp Jan 24, 2016

Finally after 3 hours of wasting my time on stackoverflow, I found this! Thanks a ton!

ayushgp commented Jan 24, 2016

Finally after 3 hours of wasting my time on stackoverflow, I found this! Thanks a ton!

@reenadeng

This comment has been minimized.

Show comment
Hide comment
@reenadeng

reenadeng Apr 5, 2016

Thank you!!!!!!

reenadeng commented Apr 5, 2016

Thank you!!!!!!

@codezjx

This comment has been minimized.

Show comment
Hide comment
@codezjx

codezjx May 4, 2016

We can use shader.setLocalMatrix() method to draw circle bitmap not from source bitmap left-top. So, there is no need to create square bitmap! You can find the optimized version here: https://gist.github.com/codezjx/b8a99374385a0210edb9192bced516a3

codezjx commented May 4, 2016

We can use shader.setLocalMatrix() method to draw circle bitmap not from source bitmap left-top. So, there is no need to create square bitmap! You can find the optimized version here: https://gist.github.com/codezjx/b8a99374385a0210edb9192bced516a3

@jay915

This comment has been minimized.

Show comment
Hide comment
@jay915

jay915 May 5, 2016

Thank you

jay915 commented May 5, 2016

Thank you

@stephenrichard

This comment has been minimized.

Show comment
Hide comment
@stephenrichard

stephenrichard Jun 12, 2016

Thank you that's perfect !

stephenrichard commented Jun 12, 2016

Thank you that's perfect !

@zionix357

This comment has been minimized.

Show comment
Hide comment
@zionix357

zionix357 commented Aug 6, 2016

Nice.

@Shujito

This comment has been minimized.

Show comment
Hide comment
@Shujito

Shujito Oct 7, 2016

I'll star it

Shujito commented Oct 7, 2016

I'll star it

@naveedshamim

This comment has been minimized.

Show comment
Hide comment
@naveedshamim

naveedshamim Nov 4, 2016

Excellent .........

naveedshamim commented Nov 4, 2016

Excellent .........

@MohamaedGamal

This comment has been minimized.

Show comment
Hide comment
@MohamaedGamal

MohamaedGamal Feb 8, 2017

how used it in main ?

MohamaedGamal commented Feb 8, 2017

how used it in main ?

@Inn0vat0r

This comment has been minimized.

Show comment
Hide comment
@Inn0vat0r

Inn0vat0r Feb 16, 2017

Thanks @alxscms for gif config help.

Inn0vat0r commented Feb 16, 2017

Thanks @alxscms for gif config help.

@alexbbb13

This comment has been minimized.

Show comment
Hide comment
@alexbbb13

alexbbb13 Mar 22, 2017

Thanks @alexcms for GIF config
Exception: Attempt to read from field 'int android.graphics.Bitmap$Config.nativeInt' on a null object reference
Solution (As suggested by @alexcms) : Replace line 42 with

Bitmap.Config config = source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
Bitmap bitmap = Bitmap.createBitmap(size, size, config);

alexbbb13 commented Mar 22, 2017

Thanks @alexcms for GIF config
Exception: Attempt to read from field 'int android.graphics.Bitmap$Config.nativeInt' on a null object reference
Solution (As suggested by @alexcms) : Replace line 42 with

Bitmap.Config config = source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
Bitmap bitmap = Bitmap.createBitmap(size, size, config);
@shahalRahman

This comment has been minimized.

Show comment
Hide comment
@shahalRahman

shahalRahman Jun 1, 2017

You saved my job, Thanks a lot man 👍

shahalRahman commented Jun 1, 2017

You saved my job, Thanks a lot man 👍

@at-quocnguyen

This comment has been minimized.

Show comment
Hide comment
@at-quocnguyen

at-quocnguyen Jun 19, 2017

I need your help ! How can I custom Rounded ImageView depend radius !

at-quocnguyen commented Jun 19, 2017

I need your help ! How can I custom Rounded ImageView depend radius !

@pvthiendeveloper

This comment has been minimized.

Show comment
Hide comment
@pvthiendeveloper

pvthiendeveloper commented Jun 22, 2017

Thanke you.

@hare451g

This comment has been minimized.

Show comment
Hide comment
@hare451g

hare451g Nov 8, 2017

thanks, hero

hare451g commented Nov 8, 2017

thanks, hero

@emitchel

This comment has been minimized.

Show comment
Hide comment
@emitchel

emitchel Nov 15, 2017

Good stuff here, 👍

emitchel commented Nov 15, 2017

Good stuff here, 👍

@lxww14

This comment has been minimized.

Show comment
Hide comment
@lxww14

lxww14 Dec 21, 2017

imageview has black backgound how change it to transparent

lxww14 commented Dec 21, 2017

imageview has black backgound how change it to transparent

@flaviossantana

This comment has been minimized.

Show comment
Hide comment
@flaviossantana

flaviossantana commented Apr 18, 2018

Nice!

@nicola-coolshop

This comment has been minimized.

Show comment
Hide comment
@nicola-coolshop

nicola-coolshop Jun 25, 2018

Why it crop the image?

nicola-coolshop commented Jun 25, 2018

Why it crop the image?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment