SyntaxHighlighter

2015年11月27日金曜日

GDでimagecropを使用したら画像に黒枠ができた場合の対処

PHPでGDのimagecropを使用し画像をトリミングをしたのですが、画像の周りに黒枠ができてしまいました。
PHPマニュアル>GD>imagecrop
こんな感じで上下左右に数pxの黒枠が出てしまいました。
そんなときの対処法。

imagecopyresampledを使う。

PHPマニュアル>GD>imagecopyresampled
bool imagecopyresampled (
resource $dst_image ,resource $src_image ,
int $dst_x , int $dst_y ,
int $src_x , int $src_y ,
int $dst_w , int $dst_h ,
int $src_w , int $src_h )

$dst_imageは
$dst_image = imagecreatetruecolor( $img_width, $img_height );
などとし、
$src_imageは元になる画像sourceを指定
$dst_xと$dst_yは0を指定。
$src_xと$src_yは切り取りたいx,y位置。
$dst_wと$src_w、 $dst_hと$src_h
はそれぞれ同じ値で幅と高さを指定。
これで黒枠が出ないようになる。
結果は
はい、すっきり。

imagedestroyで使用したリソースは破棄することを忘れずに。









2015年10月30日金曜日

jQuery UI のSortableでアイテムにclickイベントを併用した場合の問題

jQuery UIのSotrableを使用し、Sortable内の各アイテムにclickイベントを設置した場合、ドラグ後にclickイベントが発火してしまう問題。
Chromeではドラッグ後にclickイベントが発火することは無かったが、FireFoxなどでは、この問題が起きる。
解決方法はSotableのオプションに

 helper:"clone"

を追加してあげる。
これで解決。




2014年9月18日木曜日

iOS8.0をXcode5.1でデバッグする方法

テスト端末のiOSを8.0にアップデートしたところ、Xcodeで認識しなくなった。
デバイスの選択で
[プロジェクト名] > [iOS Device]
となり、端末が選択できない。

まず、以下の場所を確認
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
この場所にサポートしているiOSのバージョン毎のディレクトリーがあるが、
7.1 (11D167)」はあるが、やはり8.0は無い。

アップデートを待つのも一つ。

ある掲示板に次のような記述があった。リンクを作るそうだ。
sudo ln -s /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSup‌​port/7.1\ (11D167) /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSup‌​port/8.0\ (12A4265u)

試してみたところ、一応動いた。
Xcode6がリリースされるまでこれで待とうと思う。

ちなみに、Xcode6のベータ版をインストールしている場合は、下記で動くそうだ。
sudo ln -s /Applications/Xcode6-Beta4.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/8.0\ (12A4331d) /Volumes/MAVERICKS/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/8.0\ (12A4331d)


2014年5月26日月曜日

レンタルサーバでsass,compassを使う為のgemの設定

私の使用しているレンタルサーバはさくらレンタルサーバです。
この環境で、sassを使うために設定した内容を一部紹介します。
というか、さくらレンタルサーバでgemを使用するための.bash_profileもしくは.cshrcの設定について。

さくらレンタルサーバなどで通常、gem を使用してインストールする場合、何も設定していない場合は


ERROR: While executing gem ... (Gem::FilePermissionError)
  You don't have write permissions into the /usr/local/lib/ruby/gems/1.8 directory.

などと言われてしまいます。
当然レンタルサーバで、/usr/local/配下は書き込めないでしょう。

なので、次のような設定をします。

.cshrcの場合
setenv GEM_HOME $HOME/local/rubygems/gems
setenv RUBYLIB $HOME/local/rubygems/lib
setenv RB_USER_INSTALL true
setenv PATH ${PATH}:$HOME/local/rubygems/bin

.bash_profileの場合
PATH=$PATH:$HOME/local/rubygems/bin
GEM_HOME=$HOME/local/rubygems/gems
RUBYLIB=$HOME/local/rubygems/lib
RB_USER_INSTALL=true
export GEM_HOME
export RUBYLIB
export RB_USER_INSTALL
export PATH

などとし、設定を反映して下さい。
さて、sassとcompassをインストールしてみましょう。
$ gem install sass
Fetching: sass-3.3.7.gem (100%)
Successfully installed sass-3.3.7
1 gem installed
Installing ri documentation for sass-3.3.7...
Installing RDoc documentation for sass-3.3.7...
$
$ gem install compass
Fetching: sass-3.2.19.gem (100%)
Fetching: chunky_png-1.3.1.gem (100%)
Fetching: fssm-0.2.10.gem (100%)
Fetching: compass-0.12.6.gem (100%)
Successfully installed sass-3.2.19
Successfully installed chunky_png-1.3.1
Successfully installed fssm-0.2.10
Successfully installed compass-0.12.6
4 gems installed
Installing ri documentation for sass-3.2.19...
・
・
・
Installing RDoc documentation for compass-0.12.6...
$


OKでした。

2012年6月29日金曜日

ASUS EeePC 1025c & Ubuntu12.04 ...解像度変更編


Ubuntu12.04をASUSのEeePCシリーズに入れた場合、ディスプレイの解像度が800x600で変更できないという報告をよく目にします。
今回はASUSのEeePC1025Cの1024x600に変更できたので報告致します。

6月にEeePC1025Cを購入。
メモリを4GBに、HDDをSSDに換装。
そしてOSはUbuntu12.04に変更。
Ubuntuのバージョンが11.xの時はUnityの評価が低く、自分でも不満があったので11.xの導入はしなかったのですが、今回はディスプレイが10.1インチなので、このUIなら使い易いだろうと思い、12.04にしました。
Windowsの左下のメニューを頑張って操作しなくてもよいからと言う意味で。

EeePCにUbuntu12.04を入れた状態で、どのようになったかを軽くまとめます。

  • メモリの認識は/proc/meminfoで確認して4GBちゃんと認識されています。
  • 備え付けのSDカードリーダも動作しています。
  • ディスプレイの上についているカメラも認識しています。
  • 備え付けのマイクも認識しています。
  • キーボードのFnで割り当てられている機能について、ディスプレイの明るさ調整はできないようです。それ以外はほとんど使えます。スクリーンショットもできます。
  • Unityですが、やはり標準ではUnity2Dです。特に2Dでも問題がないので、今のところ3Dに変更する予定はありません。
  • 動作速度ですが、全く問題ないです。というより、期待していた以上にキビキビ動いてくれます。
  • 最後にバッテリーですが、このPCはハードウエアとソフトウエアでバッテリーの持ちを良くし、仕様では10時間と言う表記となっています。ただし、購入時の環境(Windows)で。Ubuntuにした場合、バッテリーの持ち時間の表示は、6時間強となりました。SSDを使用しているので、HDDのままだと恐らくもう少し短くなるかもしれません。


さて、本題です。
ディスプレイの設定が解像度800x600で変更できない。
xrandrの結果は次のようになっています。
---------------------------------------------------------------
xrandr: Failed to get size of gamma for output default
Screen 0: minimum 800 x 600, current 800 x 600, maximum 800 x 600
default connected 800x600+0+0 0mm x 0mm
    800x600 0.0*"
---------------------------------------------------------------
maximumが800x600なので、設定ツール等を使用してもそれ以外に変更ができない。

解決方法として、xrandrを使用したり、xorg.confで設定したりという方法があります。
それについては未確認です。

こちらのフォーラムで同様の問題に対し、解決策が載っているのを見つけました。
http://forum.ubuntu-fr.org/viewtopic.php?pid=9088911
フランス語ですが。

この方法は、カーネルを更新することで、グラフィックモジュールが認識され、ディスプレイの解像度を変えることが出きると。

ASUS EeePC1025CのグラフィックはIntel atom内臓のグラフィックモジュールを使用しています。
このモジュールはGMA3650というものです。

Ubuntu12.04のkernelバージョンは3.2.0で、どうやらこのkernelはこのGMA3650には対応していないもよう。

それに対し、今回更新しようとしているバージョンは3.4.xは対応している。

ということで、試してみた。
手順は以下。

1. カーネルをダウンロードして解凍

$ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.4.tar.bz2
$ tar jxvf linux-3.4.4.tar.bz2

2. make menuconfigで.configの設定
(他のツールでも、直接変更してもよい)

解凍したディレクトリに移動
$ cd linux-3.4.4/
$ make menuconfig


ここで、もしmenuconfigを立ち上げるのに必要なライブラリがない場合は、エラーが出力される。
--------------------------------------------------------------

 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 ***
 *** Install ncurses (ncurses-devel) and try again.
 ***

--------------------------------------------------------------
なので、必要なライブラリをインストールする。

$ sudo apt-get install libncurses5-dev

再度チャレンジ
$ make menuconfig

3. menuconfigで.configを編集


Device drivers ---> Graphics support ---> Direct rendering manager --->
ここで"Intel GMA5/600 KMS Framebuffer"という項目を探し、"m"と入力
この項目の下に"Intel GMA3600/3650 support"と言う項目が出るので、"y"と入力。

フォーラムに載っている内容ではもう一つ項目を設定。

Device drivers ---> Staging drivers --->
 "Realtek RTS5139 USB card reader support" の項目に"n"を入力
理由は分からない。


これでmenuconfigは終了。

4. コンパイルの実行

まず、カーネルコンパイル用のパッケージをインストール
$ sudo apt-get install kernel-package

そして、make clean
$ make-kpkg clean

makeする。
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

ここから恐らく1時間以上かかった。

5. インストール

makeが終了したら、一旦上の階層に戻る
$ cd ..

このディレクトリにcustom kernel_imageとkernel_headersの2ファイルのdebファイルができているので
次のコマンドでインストール
sudo dpkg -i *.deb

6. 起動の設定

$ cd /lib/modules
このディレクトリに3.4.4-customが作成されている。

initramfsに、この3.4.4-customを登録する。
$ sudo update-initramfs -ck 3.4.4-custom

grubを更新。
$ sudo update-grub


これでカーネルの更新は終了。
リブートする。

恐らく再起動後にディスプレイの設定が変だから、とりあえず1024x600にするよ。
といったメッセージが表示される。

ログイン。

画面を見ていただきたい。
1024x600の画面になっているはずである。

設定から、ディスプレイの解像度の設定を見てみると1024x600
ただし、それ以外の選択肢はない。

しかしながら、ディスプレイがとても見やすい。
そして、カーネルをコンパイルしたので、動作がさらに早くなった。
気がする。


N2600を使ったASUS EeePC101CHなどでも同様に変更できると思われる。

2012年1月31日火曜日

【AndEngine】背景を画像にする


背景に画像を使いたい場合の方法。


onLoadResources()内で
背景テクスチャのTextureRegionクラスのインスタンスを生成

onLoadScene()内で
背景画像からSpriteのインスタンスを生成、
SpriteからSpriteBackgroundのインスタンスを生成してsetBackgroundメソッドに読み込ませてあげる。



■SpriteBackgroundクラスのコンストラクタ
SpriteBackground(final BaseSprite pBaseSprite)
SpriteBackground(final float pRed, final float pGreen, final float pBlue, final BaseSprite pBaseSprite)

■SceneクラスのsetBackgroundメソッド
void setBackground(final IBackground pBackground)

参考にしたソース

AndEngine-Forumsより
Set as a background image

では実際に使用した際から抜粋



/**  省略  **/

private BitmapTextureAtlas mBackgroundTextureAtlas;
private TextureRegion mBackgroundGrassTextureRegion;

public void onLoadResources() {
  BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
  this.mBackgroundTextureAtlas = new BitmapTextureAtlas(512, 512, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
  this.mBackgroundGrassTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBackgroundTextureAtlas, this, "bg1.png", 0, 0);
  this.mEngine.getTextureManager().loadTextures(this.mBackgroundTextureAtlas);
}
 
public Scene onLoadScene() {
  this.mEngine.registerUpdateHandler(new FPSLogger());
  this.mScene = new Scene();
  
  final Sprite sp = new Sprite(0, 0, mBackgroundGrassTextureRegion);
  this.mScene.setBackground(new SpriteBackground(sp));
  
  /** 省略 **/
  
  return this.mScene;
}








2012年1月18日水曜日

【AndEngine】TimerHandlerの使い方

タイマーを使用してn秒後に〇〇したい。という要望を叶える。

まずTimerHandlerクラスについてjavadocを見てみよう。
Class TimerHandler


コンストラクタは2つ
TimerHandler(float pTimerSeconds, boolean pAutoReset,
       ITimerCallback pTimerCallback)
TimerHandler(float pTimerSeconds, ITimerCallback pTimerCallback)

第一引数は秒で指定。
上の方は第二引数にboolean型でAutoResetの指定ができる。
メソッドのsetAutoReset(boolean pAutoReset) でも同様に設定できる。
AutoResetをtrueにすると指定した秒で繰り返しpTimerCallbackが呼ばれる。
falseの場合は指定した秒が経過するとpTimerCallbackが1度呼ばれる。
reset()を実行すると再度Timerが起動する。
引数のpTimerCallbackはITimerCallbackインターフェイスを実装した自身を呼ぶためにthisを指定したり、ITimerCallbackインターフェイスをnewしても良い。
では、サンプル

final TimerHandler timerHandler = new TimerHandler(1.0f, true, new ITimerCallback() {

  public void onTimePassed(TimerHandler pTimerHandler) {
  
    /** 処理したい内容を記述 **/
    Debug.d("TimePassed");
  }

});
mScene.registerUpdateHandler(timerHandler);
TimerHandlerのインスタンスをregisterUpdateHandlerに渡すことを忘れずに。